我正在尝试编写一个简单的正则表达式来匹配嵌套的大括号。所以如果我有这样的文字:
{
apple
{second}
banana
}
然后我希望它匹配第一个和最后一个 {}
之间的整个文本(包括第二对 {}
)。这是我编写的正则表达式:
/{ (?:.+?|(?R) ) }/six
其输出是:
{ apple {second}
正如您所看到的,第一个花括号正在匹配,而末尾的“banana”没有被匹配。这是我希望它返回的输出:
apple {second} banana
我做错了什么?
最佳答案
您要使用的模式是:
/{ (?: (?R) | .+? )+ }/six
使用您的正则表达式,.+?
始终优先。 PCRE 将匹配最长的可能字符串,并且从不寻找替代字符串。
仅使替代 (..)+
重复才允许匹配在递归部分和匹配任何内容占位符之间切换。
关于php - 为什么这个递归正则表达式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13436783/