我有这个正则表达式
^(\\w|@|\\-| |\\[|\\]|\\.)+$
我试图理解它到底做了什么,但我似乎无法得到任何结果......我只是无法理解无处不在的双反斜杠......不应该使用双反斜杠来获得单个反斜杠?
这个正则表达式是为了验证用户名不使用奇怪的字符和东西。
如果有人可以解释一下双反斜杠的事情。@_@
附加信息:我在 C# 中使用 Regex.IsMatch 获得了这个正则表达式,以检查我的用户名字符串是否与正则表达式匹配。这是一个asp网站。
我的猜测是它只是转义了\因为反斜杠是 c# 中的转义字符。
string pattern = "^(\\w|@|\\-| |\\[|\\]|\\.)+$";
可以使用逐字字符串重写为
string pattern = @"^(\w|@|\-| |\[|\]|\.)+$";
现在更容易理解发生了什么。它将匹配任何单词字符、at-sign、连字符、空格、方括号或句点,重复一次或多次。^和分别匹配字符串的$开头和结尾,因此只允许使用这些字符。
因此,此模式等价于:
string pattern = @"^([\w@ \[\].-])+$";
双斜线应该是单斜线。双斜线用于转义斜线本身,因为斜线用于C# 字符串上下文中的其他转义字符,例如\n代表换行
整理出双斜线后,它变成^(\w|@|\-| |\[|\]|\.)+$
分解这个正则表达式,|表示 OR,并\w|@|\-| |\[|\]|\.表示\wor @or or \-or space or \[or or \]or \.。也就是说,任何字母数字字符、@、-、空格[、]和.字符。请注意,此斜杠是正则表达式转义,转义-,和字符[,因为它们在正则表达式上下文中都有特殊含义].
并且,+表示前一个标记(即\w|@|\-| |\[|\]|\.)重复一次或多次
因此,整个事物表示字母数字字符、@、-、空格、[和]字符的任意组合中的一个或多个.。
有在线工具可以分析正则表达式。一旦这样在http://www.myezapp.com/apps/dev/regexp/show.ws
它报告的地方
Sequence: match all of the followings in order
BeginOfLine
Repeat
CapturingGroup
GroupNumber:1
OR: match either of the followings
WordCharacter
@
-
[
]
.
one or more times
EndOfLine
正如其他人所指出的,双反斜杠只是转义反斜杠,因此您可以将正则表达式嵌入字符串中。例如,“\\w”将被解析器解释为“\w”。
^ 表示行首。
括号用于分组
\w 是一个单词字符
| 表示或
@匹配@字符
\- 匹配连字符
[ 和 ] 匹配方括号
\。匹配一个时期
+ 表示一个或多个
$ 行尾。
因此,正则表达式用于匹配仅包含单词字符或@或连字符或空格或方括号或点的字符串。
这就是它的意思:
^(\\w|@|\\-| |\\[|\\]|\\.)+$
^- 表示正则表达式从字符串的开头开始。匹配不应从字符串的中间开始。
以下是括号中的个别内容:
\\w- 表示一个“单词”字符。通常,这显示为\w,但这是被转义的。
@- 表示允许使用 @ 符号
\\-- 表示-允许 a。这是转义的,因为破折号在正则表达式中可以有其他含义。由于它不在角色类中,我不认为这在技术上是必需的。
- 允许有空格
\\[和\\]- [ 和 ] 是允许的。
\\.- 句点是有效字符。转义是因为句点在正则表达式中具有特殊含义。
现在所有这些字符都|在括号中作为分隔符 - 这意味着 OR。所以这些字符中的任何一个都是有效的。
+末尾的表示括号中描述的一个或多个字符是有效的。这$意味着正则表达式的结尾必须与字符串的结尾匹配。
请注意,如果您只是像这样为字符串添加前缀,则不需要双斜杠:
@"\w"是相同的"\\w"