正则表达式:查找大括号之间的字符串,大括号本身包含大括号

时间:2019-10-15 16:15:08

标签: regex string

假设采用以下格式的字符串:

Use \hyperlink{aaa}{apple {pear} banana} and \hyperlink{bbb}{banana {pear} {apple}}.

我要提取:

\hyperlink{aaa}{apple {pear} banana}
\hyperlink{bbb}{banana {pear} {apple}}

什么正则表达式可以用于这种提取?

我被卡住了

\\hyperlink{\S+}{.+}

2 个答案:

答案 0 :(得分:2)

如果没有任何嵌套,则可以使用带有negated }{的模式,例如

\\hyperlink{[^}{]*}{[^}{]*(?:{[^}{]*}[^}{]*)*}

类似this answer,但unrolled。参见the demo at regex101。要{提取},请使用groupsdemo)。

根据您的环境/ regex风格,对于不在字符类中的括号以字面意义进行匹配,可能有必要使用反斜杠对开头{进行转义。

还要注意,\S+如果不知道,可能会消耗}.+ can match more than desired

答案 1 :(得分:1)

在这里,如何使用递归正则表达式

\\hyperlink\{[^}]+?\}(\{(?>[^{}]+|(?1))+\})(?=\s|$)

Regex Demo

Recursive regex