有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

鉴于:

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

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

如果没有嵌套的{kl},正则表达式\{[^{}]*\}就可以正常工作。但不是嵌套的{kl}

有办法做到这一点吗?如果不可能,我可以说“匹配{and}之间的文本,其中包含的文本大小至少为3个字符,因此包含两个字符的嵌套{kl}不匹配”(我假设为一级嵌套)

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

谢谢


共 (1) 个答案

  1. # 1 楼答案

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

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

    在Java中,你必须避免像我一样打开大括号

    上面的正则表达式匹配一个大括号,然后查找除{}字符(即[^{}]+)之外的其他字符,或者大括号{[^{}]*}中包含的其他字符,并尽可能重复此模式,然后期望匹配一个大括号

    live demo here