正则表达式匹配特殊字符

时间:2014-10-02 09:36:33

标签: c# .net regex

我跟随this tutorial

当我尝试测试我的正则表达式时(方法转储来自linqpad以在控制台上显示它):

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

它应匹配以" a"开头的单词。并且在单词的末尾有x个字母数字字符。

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

我对正则表达式的理解:

  • " \ B" (单词的开头)
  • "" (只是字母a)
  • " \ W" (字母数字字符)
  • " *" (重复上一学期)
  • " \ B" (结尾)

我做错了什么?

3 个答案:

答案 0 :(得分:4)

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

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

*表示“零或更多”。

所以这将是匹配:

enter image description here

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

您可能希望将*更改为+

另请阅读:

答案 1 :(得分:1)

它仅匹配字符串的a

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

在您的情况下,a匹配,因为它直接跟随上面提到的单词边界。原因是*匹配前一个标记的零个或多个字符。

请参阅here

根据您的x应该是1个或多个令牌而不是0个或更多令牌,您需要更改为\ba\w+\b

答案 2 :(得分:1)

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