我试图使用递归正则表达式来匹配类似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