我有这个正则表达式
^(\\w|@|\\-| |\\[|\\]|\\.)+$
我试图理解它到底做了什么,但我似乎无法得到任何结果......我只是无法理解无处不在的双反斜杠......不应该使用双反斜杠来获得单个反斜杠?
这个正则表达式是为了验证用户名不使用奇怪的字符和东西。
如果有人可以解释一下双反斜杠的事情。@_@
附加信息:我在 C# 中使用 Regex.IsMatch 获得了这个正则表达式,以检查我的用户名字符串是否与正则表达式匹配。这是一个asp网站。
我的猜测是它只是转义了\
因为反斜杠是 c# 中的转义字符。
string pattern = "^(\\w|@|\\-| |\\[|\\]|\\.)+$";
可以使用逐字字符串重写为
string pattern = @"^(\w|@|\-| |\[|\]|\.)+$";
现在更容易理解发生了什么。它将匹配任何单词字符、at-sign、连字符、空格、方括号或句点,重复一次或多次。^
和分别匹配字符串的$
开头和结尾,因此只允许使用这些字符。
因此,此模式等价于:
string pattern = @"^([\w@ \[\].-])+$";
双斜线应该是单斜线。双斜线用于转义斜线本身,因为斜线用于C# 字符串上下文中的其他转义字符,例如\n
代表换行
整理出双斜线后,它变成^(\w|@|\-| |\[|\]|\.)+$
分解这个正则表达式,|
表示 OR,并\w|@|\-| |\[|\]|\.
表示\w
or @
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"