我試圖使用遞歸正則表達式來匹配類似bash的變量擴展。基本上,我應該能夠匹配類似下面的字符串:正則表達式遞歸:匹配兩個字符的開頭
${FOO=BAR}
${FOO=${BAR=BAZ}}
而且處理的投入是這樣的:
${FOO=\${BAR=BAZ}}
${FOO={${BAR=BAZ}}
在第一種情況下,應該投其所好,但不包括最後}
,第二種情況應該完全匹配。這是因爲我試圖將兩個字符的開頭${
與單字符關閉}
匹配。開幕式和閉幕式都應該能夠逃脫。
我已經得到遠至PCRE正則表達式\$\{(?:[^{}]|(?R))*\}
。但是這不能正確處理轉義。如果我將其修改爲(?:^|[^\\])(?:\\\\)*(\$\{(?:[^{}]|(?R))*\})
,那麼只有最外層的轉義匹配正確。
這可以用正則表達式來完成,還是我最好只寫一個pyparsing解析器?
你試圖匹配的東西有點不清楚,特別是最後兩個例子。爲什麼最後一個例子沒有平衡大括號? – 2014-10-26 21:21:52
第一個示例轉義了兩個字符的開頭序列:我試圖將'$ {'與'}'匹配,而不僅僅是{{和}}。在第一種情況下,整個匹配應該是'$ {FOO = \ $ {BAR = BAZ}',而第二種情況下整個字符串應該匹配,因爲第二個'{'實際上並沒有打開任何東西。 – 2014-10-26 21:23:33
我編輯了這個問題,使其更清晰。 – 2014-10-26 21:24:52