同一个正则表达式中的两个贪婪量词

noa*_*oah 4 regex perl greedy quantifiers regex-greedy

如果我有一个未知的结构字符串:

"stuff I don't care about THING different stuff I don't care about THING ... THING even more stuff I don't care about THING stuff I care about"

我想捕捉"我关心的东西",它总是在最后一次出现之后.有可能出现0次或多次.如果有0次出现则没有我关心的东西.字符串不能以THING开头或结尾.

一些可能的字符串

"stuff I don't care about THING stuff I care about"

"stuff I don't care about"

一些不可能的字符串:

"THING stuff I care about"

"stuff I don't care about THING stuff I don't care about THING"


我目前解决这个问题的方法是使用带有两个贪心量词的正则表达式,如下所示:

if( /.*THING(.*)/ ) {
    $myStuff = $1;
}
Run Code Online (Sandbox Code Playgroud)

它似乎有效,但我的问题是两个贪婪量词如何相互作用.第一个(最左边)贪婪量词总是"比第二个更贪婪"吗?

基本上我保证不会得到如下分割:

"stuff I don't care about THING"

$1 = "different stuff I don't care about THING even more stuff I don't care about THING stuff I care about"

与我想要的分裂相比:

"stuff I don't care about THING different stuff I don't care about THING even more stuff I don't care about THING"

"stuff I care about"

tri*_*eee 10

正则表达式返回最长的最左边的匹配.第一个通配符最初将匹配到行尾,然后连续回溯一个字符,直到正则表达式的其余部分产生匹配,即使THING字符串中的最后一个匹配.