混合貪婪和非貪婪量詞

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