用于匹配嵌套(但不是单个)括号的正则表达式?

时间:2014-06-20 13:34:14

标签: regex

我正在尝试构建一个与嵌套大括号匹配但不匹配单个大括号的正则表达式。

例如,给定此字符串:

" { { I'm so cool, I'm nested  } } I'm neither { I'm just boring normal braces } "

正则表达式应匹配:

{ { I'm so cool, I'm nested  } }

但不是:

{ I'm just boring normal braces }

我想我几乎就在那里,我一直在玩正则表达式测试器试图让它工作,但我必须遗漏一些东西。

这是我到目前为止所得到的:

(?(?=\{(?>[^\{\}]++|(?R))*\})(\{(?>[^\{\}]++|(?R))*\}))

它仍然匹配单曲。

这个想法是它使用带有正向前瞻的if语句来检查是否存在嵌套大括号。如果它匹配它们。我不知道如何排除常规的。

5 个答案:

答案 0 :(得分:1)

您可以将其分组并在索引1处获得匹配。

({\s*{+.*?}+\s*})

以下是regex101

上的演示

答案 1 :(得分:0)

这应该适用于准确的第二级嵌套curlies:

{[^{}]*{([^}]*)}

答案 2 :(得分:0)

这对你有用吗?

{\s*{.*?}\s*}

http://regex101.com/r/zA1bP2

答案 3 :(得分:0)

({( ?){ ( ?)(.*) ( ?)}( ?)})

匹配您要查找的字符串。如果括号之间有空格也不重要。

Regexr

演示

答案 4 :(得分:0)

你现在的模式在Regex101上似乎对我很好。它与单打不匹配!但是我能够为你总结一下这个:

(\{(?:[^{}]|(?R))++\})

你真的不需要if。