Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字符之间匹配文本(避免嵌套)_Java_Regex - Fatal编程技术网

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

Java 在字符之间匹配文本(避免嵌套),java,regex,Java,Regex,鉴于: 我想匹配字符{和最后一个}之间的文本,不包括嵌套-即文本{defghij{kl}mnopqrst}和{aaaaaaaa} 如果没有嵌套的{kl},正则表达式\{[^{}]*\}就可以正常工作。但不能使用嵌套的{kl} 有办法做到这一点吗?如果不可能,我是否可以说{和}之间的匹配文本,其中封闭文本的大小至少为3个字符,因此包含两个字符的嵌套{kl}不匹配?我假设一级嵌套 编辑: 谢谢,在您的问题中,因为嵌套级别不会达到两个,所以可以使用可读的短正则表达式来解决它,这将是: "abc{def

鉴于:

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

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

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

编辑:


谢谢,

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

"abc{defghij{kl}mnopqrst}uvwxyz{aaaaaaaaaa}"
在Java中,您必须避免使用大括号,就像我所做的那样

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


请参见

See Java不支持您想要的那种递归,不幸的是,在PCRE中,您可以{?:?R |[^{}+}如果您确定嵌套级别不会超过一个,那么您可以安全地使用这个{?:{[^{}]*}[^{}+*}。在这里可以看到@revo的实时演示,它在Java中不起作用。它只需要在Java中进行一些适当的转义。
\{(?:\{[^{}]*}|[^{}]+)*}