c# - 惰性正则表达式无法按预期工作 C#

标签 c# regex regex-greedy

我有以下正则表达式: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/

相关文章:

C Regex - 获取匹配的字符串

javascript - 如何将正则表达式更改为非贪婪 (JS)

python - 如何精确匹配前一组包括不区分大小写?

c# - 为什么我必须使用 IoC unity

c# - DataGridView 列只有一些条目的按钮?

python - 使用 Python 解析 ping 输出

regex - 使用非贪婪限定符或前瞻更好吗?

c# - MouseLeave 事件处理程序太慢

c# - "The * field is required"当EF对象已经有字段

php - 使用正则表达式的 xpath 查询