正则表达式贪婪问题

标签 regex regex-greedy

我确信这个很容易,但我已经尝试了很多变化,但仍然无法满足我的需要。事情是太贪婪了,我无法让它停止贪婪。

鉴于文本:

test=this=that=more text follows

我只想选择:
test=

我试过以下正则表达式
(\S+)=(\S.*)
(\S+)?=
[^=]{1}
...

谢谢大家。

最佳答案

这里:

// matches "test=, test"
(\S+?)=

or

// matches "test=, test" too
(\S[^=]+)=

您应该考虑使用第二个版本而不是第一个版本。给定你的字符串 "test=this=that=more text follows" , 版本 1 将匹配 test=this=that=然后继续解析到字符串的末尾。然后它会回溯,并找到 test=this= ,继续回溯,发现test= ,继续原路返回,落户test=因为它是最终答案。

版本 2 将匹配 test=然后停止。您可以在更大的搜索(如多行或整个文档匹配)中看到效率提升。

关于正则表达式贪婪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/210080/

相关文章:

regex - 正则表达式贪婪匹配没有按预期工作

javascript - 将所有具有特定属性和值的 CSS 选择器与 RegEx 匹配

regex - 如何在文件内容替换器 teamcity 的变量中转义反斜杠

python - 删除 pandas 系列中以特定字符串开头的所有文本

python - 用于匹配温度的正则表达式 (°c)

java - 为什么星号量词比Java正则表达式中的加号量词更贪婪?

php - MySQL RLIKE 特殊字符转义 PHP

javascript - 寻找一个正则表达式来解析JS的参数字符串

r - 文本挖掘,包括模式和数字

regex - Perl 正则表达式停止负后视从下一个贪婪捕获中夺走