我跟随this tutorial。
当我尝试测试我的正则表达式时(方法转储来自linqpad以在控制台上显示它):
Regex.Match("a^7lowah", @"\ba\w*\b").Success.Dump();
它应匹配以" a"开头的单词。并且在单词的末尾有x个字母数字字符。
但不幸的是上面的正则表达式匹配。
我对正则表达式的理解:
我做错了什么?
答案 0 :(得分:4)
是的,正则表达式将匹配。
Pattern: \ba\w*\b
String: a^7lowah
*
表示“零或更多”。
所以这将是匹配:
正如你所看到的,没有单词字符匹配,但因为你量化“零或更多”,它没关系 - 我们的指针跳过构造的那一部分,并且已经可以断言一个单词边界
您可能希望将*
更改为+
。
另请阅读:
答案 1 :(得分:1)
它仅匹配字符串的a
。
由于a
是单词字符而^
不是单词字符,因此它们之间的空字符串定义单词边界。 (对于\b
)
在您的情况下,a
匹配,因为它直接跟随上面提到的单词边界。原因是*
匹配前一个标记的零个或多个字符。
请参阅here。
根据您的x
应该是1个或多个令牌而不是0个或更多令牌,您需要更改为\ba\w+\b
。
答案 2 :(得分:1)
问题不在你的Regexp中,而在于你对成功的解释。正则表达式仅匹配“a”,但仍然匹配,成功将成立。