2

I'm trying to write a simple regex to match nested curly brackets. So if I have this text:

{
  apple
  {second}
  banana
}

Then I want it to match the entire text between the first and last {} (including the 2nd pair of {}). Here's the regex I've written:

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

The output for this is:

{ apple {second} 

As you can see the first curly bracket is being matched, and the 'banana' at the end is not being matched. Here's the output I want it to return:

apple {second} banana 

What am I doing wrong?

4

2 に答える 2

2

使用するパターンは次のとおりです。

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

あなたの正規表現では、.+?が常に優先されます。PCRE は可能な限り長い文字列に一致し、代替を探すことはありません。

代替の繰り返しを作成するだけ(..)+で、再帰部分と何でも一致するプレースホルダーの間でマッチングを切り替えることができます。

于 2012-11-18T02:32:08.493 に答える
0

これはあなたのために働きますか?

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

于 2012-11-18T02:13:35.393 に答える