我有以下正则表达式:a?\W*?b
我有一个字符串 ,.! ,b
搜索匹配项时,我得到 ,.! ,b
,但不仅仅是我期望的 b
。这是为什么?如何修改正则表达式以获得我需要的内容?
感谢您的帮助。
最佳答案
惰性量词在这里对您想要的没有帮助。让我们看看发生了什么。
正则表达式引擎从字符串的开头开始。首先尝试匹配 a
。它不能,但这没问题,因为 a
是可选的。
然后,有一个惰性 \W*?
所以正则表达式引擎会跳过它但会记住当前位置。
然后它会尝试匹配 b
。它不能,所以它回溯并成功地将 ,
与 \W*?
匹配。然后它继续尝试匹配 b
(因为惰性量词)。还是不行,又原路返回。这会重复几次,直到正则表达式引擎最终到达 b
。现在匹配完成 - 正则表达式引擎宣布成功。
所以正则表达式按规定工作——只是不按预期工作。现在的问题是:您希望正则表达式做什么?
例如,如果您真正想要的是:
单独匹配 b
,除非它前面有 a
和一些非单词字符,在这种情况下匹配从 a
到 的所有内容>b
,然后使用
b|a\W*b
关于c# - 惰性正则表达式无法按预期工作 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082912/