2014-10-02 118 views
0

我跟随this tutorial正则表达式与特殊字符匹配

当我想测试我的正则表达式(方法转储是从linqpad到控制台上显示):

Regex.Match("a^7lowah", @"\ba\w*\b").Success.Dump(); 

应该匹配开头的单词都以“一”和满足x字母数字字符的数量到单词的末尾。

但不幸的是,上面的正则表达式匹配。

我的正则表达式的理解:

  • “\ B”(开始的词)
  • “一”(只是字母A)
  • “\ W”(字母数字字符)
  • “*”(重复之前的术语)
  • “\ b”(这个词的结尾)

我在做什么错?

+0

这真的很奇怪,你的正则表达式没有错,它不应该匹配。 – 2014-10-02 09:42:54

+0

你应该说明你为什么不希望这场比赛取得成功。是因为领先的'a'后面是'^'而不是空格?是因为你想让整个输入必须与输出匹配吗?是因为“a”后面跟着0,而不是1个或更多的其他字母? – Rawling 2014-10-02 09:58:41

回答

4

是的,正则表达式会匹配。

Pattern: \ba\w*\b 
String: a^7lowah 

*表示“0或更多”。

因此,这将是比赛:

enter image description here

正如你所看到的,没有单词字符匹配,但因为你量化“零个或多个”没关系 - 我们的指针跳过构造的那部分,并且已经可能声明一个字边界。

您可能想要将*更改为+

阅读也:

+0

+1,你不仅更快,而且你的回答更好地描述了OP的问题。 – 2014-10-02 09:53:21

+0

谢谢,将“*”更改为“+”的作品!这确实与a相匹配。因为它认为“^”是单词的结尾。 – Jamie 2014-10-02 09:53:29

1

它只匹配你的字符串的a

由于a是一个单词字符,而^不是一个单词字符,它们之间的空字符串定义了单词边界。 (对于\b

在你的情况下,a是匹配的,因为如上所述,它直接跟随边界字。原因是*匹配前一个标记的零个或多个字符。

请参阅here

取决于如果您的x应该是1个或更多个令牌而不是0个或更多个令牌,则需要更改为\ba\w+\b

+4

既然'a'是一个单词字符,'^'不是一个单词字符,它们之间的空字符串定义了单词边界。 – nhahtdh 2014-10-02 09:51:39

+0

@nhahtdh我可以编辑这个答案?谢谢你让我知道 – 2014-10-02 09:58:18

+0

@PhilippM:继续 – nhahtdh 2014-10-02 09:59:20

1

问题不在于你的正则表达式,而在于你对成功的解释。正则表达式仅匹配“a”,但这仍然是匹配,成功将是真实的。

+0

我刚刚注意到了这一点,我不知道它会计算一个特殊字符(在这种情况下“^”作为一个单词的结尾,所以一个匹配。使用:在het开始和$在正则表达式的结尾,然后它的工作就好了。 – Jamie 2014-10-02 09:49:51

相关问题