在字符之间匹配文本(避免嵌套)

时间:2018-12-08 05:03:06

标签: java regex

给出:

"abc{defghij{kl}mnopqrst}uvwxyz{aaaaaaaaaa}"

我想匹配字符{和最后一个}之间的文本(不包括嵌套),即文本{defghij{kl}mnopqrst}{aaaaaaaaaa}

没有嵌套的{kl},正则表达式\{[^{}]*\}可以正常工作。但嵌套{kl}除外。

有没有办法做到这一点?如果不可能,我是否可以说“匹配{和}之间的文本,其中所包含文本的大小至少为例如3个字符,以使包含两个字符的嵌套{kl}不匹配?(我假设一个层嵌套)

编辑者:https://www.freeformatter.com/java-regex-tester.html

谢谢

1 个答案:

答案 0 :(得分:1)

在您的问题中,由于嵌套级别不会达到两个,因此可以使用可读的短正则表达式来解决它,这可能是:

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

在Java中,必须像我一样避免使用大括号。

上面的正则表达式匹配左括号,然后寻找{}字符以外的其他字符(即[^{}]+)或用括号{[^{}]*}括起来的字符,并重复此模式然后希望尽可能匹配大括号。

请参见live demo here