2

我正在尝试编写一个简单的正则表达式来匹配嵌套的大括号。所以如果我有这个文本:

{
  apple
  {second}
  banana
}

{}然后我希望它匹配第一个和最后一个(包括第二对)之间的整个文本{}。这是我写的正则表达式:

/{ (?:.+?|(?R) ) }/six

输出是:

{ apple {second} 

如您所见,第一个大括号正在匹配,而末尾的“香蕉”未匹配。这是我希望它返回的输出:

apple {second} banana 

我究竟做错了什么?

4

2 回答 2

2

您要使用的模式是:

/{ (?:  (?R) | .+? )+ }/six

使用您的正则表达式, the.+?将始终优先。PCRE 将匹配尽可能长的字符串,并且从不寻找替代方案。

只有使替代(..)+重复允许匹配在递归部分和 match-anything 占位符之间切换。

于 2012-11-18T02:32:08.493 回答
0

这对你有用吗?

\{([\s\S]*)\}

于 2012-11-18T02:13:35.393 回答