试图理解这个正则表达式

时间:2013-05-06 15:01:16

标签: c# regex

我有这个正则表达式

^(\\w|@|\\-| |\\[|\\]|\\.)+$

我试图理解它究竟做了什么,但我似乎无法得到任何结果...... 我只是无法理解到处的双反斜杠...是不是应该使用双反斜杠来获得单个反斜杠?

这个正则表达式是验证用户名不使用奇怪的字符和东西。

如果有人能解释我双反斜杠的事情请。 @ _ @

其他信息:我使用Regex.IsMatch在C#中获得此正则表达式,以检查我的用户名字符串是否与正则表达式匹配。这是一个asp网站。

5 个答案:

答案 0 :(得分:5)

我的猜测是它只是转义\,因为反斜杠是c#中的转义字符。

string pattern = "^(\\w|@|\\-| |\\[|\\]|\\.)+$";

可以使用逐字字符串重写

string pattern = @"^(\w|@|\-| |\[|\]|\.)+$";

现在更容易理解发生了什么。它将匹配任何单词字符,符号,连字符,空格,方括号或句点,重复一次或多次。 ^$分别匹配字符串的beg和end,因此只允许这些字符。

因此,这种模式相当于:

string pattern = @"^([\w@ \[\].-])+$";

答案 1 :(得分:4)

  1. 双斜线应该是单斜杠。双斜杠用于转义斜杠本身,因为斜杠用于C#String上下文中的其他转义字符,例如\n代表新行

  2. 使用双斜杠整理后,它变为^(\w|@|\-| |\[|\]|\.)+$

  3. 分解此正则表达式,因为|表示OR,\w|@|\-| |\[|\]|\.表示\w@\-或空格或{{ 1}}或\[\]。也就是说,任何字母数字字符\.@,空格,-[]字符。请注意,此斜杠是正则表达式转义,以转义.-[]字符,因为它们在正则表达式上下文中具有特殊含义

  4. 并且,.表示前一个标记(即+)重复一次或多次

  5. 因此,整个事物意味着字母数字字符\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"

相同