混合贪婪和非贪婪量词

如果你有一个贪婪的匹配作为第一个量词,整个 RE 将是贪婪的,

如果你有非贪婪的匹配作为第一个量词,整个 RE 将是非贪婪的。

set mydata {
    Device widget1: port: 156 alias: input2
    Device widget2: alias: input1 
    Device widget3: port: 238 alias: processor2
    Device widget4: alias: output2
    }
regexp {Device\s(\w+):\s(.*?)alias} $mydata alldata devname devdata
puts "$devname $devdata"
widget1 port: 156 alias: input2
regexp {Device\s(.*?):\s(.*?)alias} $mydata alldata devname devdata
puts "$devname $devdata" 
widget1 port: 156 

在第一种情况下,第一个\ w +是贪婪的,所以所有量词都被标记为贪婪和。*?匹配超过预期。

在第二种情况下,第一种情况。*?非贪婪,所有量词都被标记为非贪婪。

其他正则表达式引擎可能没有贪婪/非贪婪量词的问题,但它们要慢得多。

Henry Spencer 写道……麻烦在于,编写那些涵盖混合贪婪正则表达式的语句的概括是非常非常困难的 - 一个适当的,独立于实现的定义,表示混合贪婪正则表达式应该匹配 - - 让他们做人们期望的事。我试过了。我还在努力。到目前为止没有运气。 …