混合貪婪和非貪婪量詞
如果你有一個貪婪的匹配作為第一個量詞,整個 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 寫道 : ……麻煩在於,編寫那些涵蓋混合貪婪正規表示式的語句的概括是非常非常困難的 - 一個適當的,獨立於實現的定義,表示混合貪婪正規表示式應該匹配 - - 讓他們做人們期望的事。我試過了。我還在努力。到目前為止沒有運氣。 …