混合贪婪和非贪婪量词
如果你有一个贪婪的匹配作为第一个量词,整个 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 写道 : ……麻烦在于,编写那些涵盖混合贪婪正则表达式的语句的概括是非常非常困难的 - 一个适当的,独立于实现的定义,表示混合贪婪正则表达式应该匹配 - - 让他们做人们期望的事。我试过了。我还在努力。到目前为止没有运气。 …