我确信这个很容易,但我尝试了很多变化,但仍然无法满足我的需求。事情太贪婪了,我不能让它停止贪婪。
鉴于文字:
test=this=that=more text follows
我想选择:
test=
我尝试过以下正则表达式
(\S+)=(\S.*)
(\S+)?=
[^=]{1}
...
谢谢大家。
答案 0 :(得分:11)
这里:
// 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=
然后停止。您可以在较大的搜索中看到效率提升,例如多行或整个文档匹配。
答案 1 :(得分:4)
你可能想要像
这样的东西^(\ S +?=)
插入符号^将正则表达式锚定到字符串的开头。的? +之后+非贪婪。
答案 2 :(得分:3)
您可能正在寻找lazy quantifiers *?,+?,??和{n,n}?
答案 3 :(得分:1)
你应该能够使用它:
(\S+?)=(\S.*)
答案 4 :(得分:1)
懒惰的量词工作,但由于回溯,它们也可能会受到影响。
考虑一下你真正想要的是“一堆非平等,平等,以及更多非平等。”
([^=]+)=([^=]+)
[^=]{1}
的示例仅匹配单个非等号字符。
答案 5 :(得分:0)
如果你只想要“text =”,我认为这只是一个简单的:
^(\w+=)
如果您确定字符串“text =”将始终开始该行,那么应该没问题。
真正的问题是字符串是这样的:
this = that = more test = text follow
如果您使用上面的正则表达式,则结果为“this =”,如果您在结尾处使用reapeater限定符修改上述内容,请执行以下操作:
^(\w+=)*
你发现了一个巨大的“this = that =”,所以我只能想象琐碎的事情:
[th\w+=]*test=
再见。