我有这个正则表达式
^(\\w|@|\\-| |\\[|\\]|\\.)+$
我试图理解它究竟做了什么,但我似乎无法得到任何结果...... 我只是无法理解到处的双反斜杠...是不是应该使用双反斜杠来获得单个反斜杠?
这个正则表达式是验证用户名不使用奇怪的字符和东西。
如果有人能解释我双反斜杠的事情请。 @ _ @
其他信息:我使用Regex.IsMatch在C#中获得此正则表达式,以检查我的用户名字符串是否与正则表达式匹配。这是一个asp网站。
答案 0 :(得分:5)
我的猜测是它只是转义\
,因为反斜杠是c#中的转义字符。
string pattern = "^(\\w|@|\\-| |\\[|\\]|\\.)+$";
可以使用逐字字符串重写
string pattern = @"^(\w|@|\-| |\[|\]|\.)+$";
现在更容易理解发生了什么。它将匹配任何单词字符,符号,连字符,空格,方括号或句点,重复一次或多次。 ^
和$
分别匹配字符串的beg和end,因此只允许这些字符。
因此,这种模式相当于:
string pattern = @"^([\w@ \[\].-])+$";
答案 1 :(得分:4)
双斜线应该是单斜杠。双斜杠用于转义斜杠本身,因为斜杠用于C#String上下文中的其他转义字符,例如\n
代表新行
使用双斜杠整理后,它变为^(\w|@|\-| |\[|\]|\.)+$
分解此正则表达式,因为|
表示OR,\w|@|\-| |\[|\]|\.
表示\w
或@
或\-
或空格或{{ 1}}或\[
或\]
。也就是说,任何字母数字字符\.
,@
,空格,-
,[
和]
字符。请注意,此斜杠是正则表达式转义,以转义.
,-
,[
和]
字符,因为它们在正则表达式上下文中具有特殊含义
并且,.
表示前一个标记(即+
)重复一次或多次
因此,整个事物意味着字母数字字符\w|@|\-| |\[|\]|\.
,@
,空格,-
,[
和{{的任意组合中的一种或多种1}}字符。
答案 2 :(得分:2)
有分析正则表达式的在线工具。一旦这样的话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”。
答案 3 :(得分:1)
^表示该行的开头。
括号用于分组
\ w是一个单词字符
|是指OR
@匹配@ character
\ - 匹配连字符
[和]匹配方括号
\。匹配一段时间
+表示一个或多个
$行尾。
因此正则表达式用于匹配仅包含单词字符或@或连字符或空格或方括号或点的字符串。
答案 4 :(得分:1)
这就是它的含义:
^(\\w|@|\\-| |\\[|\\]|\\.)+$
^
- 表示正则表达式从字符串的开头开始。匹配不应该从字符串的中间开始。
以下是括号中的各个内容:
\\w
- 表示“单词”字符。通常,这显示为\w
,但这是被转义的。
@
- 表示允许使用@符号
\\-
- 表示允许-
。由于破折号在正则表达式中具有其他含义,因此这是转义的。由于它不属于角色类,我不相信这在技术上是必需的。
- 允许空格
\\[
和\\]
- [和]是允许的。
\\.
- 句点是有效字符。因为句号在正则表达式中具有特殊含义而被删除。
现在所有这些字符在括号中都有|
作为分隔符 - 这意味着OR。所以这些字符都是有效的。
末尾的+
表示括号中描述的一个或多个字符有效。 $
表示正则表达式的结尾必须与字符串的结尾匹配。
请注意,如果您只是为字符串添加前缀,则不需要使用双斜杠:
@"\w"
与"\\w"