我正在尝试编写一个简单的正则表达式来匹配嵌套的大括号。如果我有这个文字:
{
apple
{second}
banana
}
然后我希望它匹配第一个和最后一个{}
之间的整个文本(包括第二对{}
)。这是我写的正则表达式:
/{ (?:.+?|(?R) ) }/six
这个输出是:
{ apple {second}
正如您所看到的那样,第一个花括号正在匹配,并且末尾的“香蕉”未匹配。这是我希望它返回的输出:
apple {second} banana
我做错了什么?
答案 0 :(得分:2)
您要使用的模式是:
/{ (?: (?R) | .+? )+ }/six
使用正则表达式,.+?
始终优先。 PCRE将匹配最长的字符串,从不寻找替代方案。
只允许替代(..)+
重复允许匹配在递归部分和匹配任何占位符之间切换。
答案 1 :(得分:0)
这对你有用吗?
\{([\s\S]*)\}