我需要一个正则表达式来选择两个外括号之间的所有文本。

例子: START_TEXT(这里的文本(可能的文本)文本(可能的文本(更多的文本))END_TXT ^ ^

结果: (此处文本(可能的文本)文本(可能的文本(更多的文本)))


当前回答

答案取决于您是需要匹配括号的匹配集,还是只需要匹配输入文本中的第一个开始到最后一个结束的括号。

如果您需要匹配匹配的嵌套括号,那么您需要的不仅仅是正则表达式。-见@dehmann

如果只是先开后关,再见@扎克

决定你想要发生什么:

abc ( 123 ( foobar ) def ) xyz ) ghij

您需要决定在这种情况下您的代码需要匹配什么。

其他回答

[^\(]*(\(.*\))[^\)]*

[^\(]*匹配字符串开头不是右括号的所有内容,(\(.*\))捕获括在括号中的所需子字符串,[^\)]*匹配字符串末尾不是右括号的所有内容。注意,这个表达式不会试图匹配括号;一个简单的解析器(参见dehmann的回答)将更适合于此。

(?<=\().*(?=\))

如果您想在两个匹配的括号之间选择文本,那么使用正则表达式就不太走运了。这是不可能的。

这个正则表达式只返回字符串中第一个开始括号和最后一个结束括号之间的文本。


(*)除非你的regex引擎有像平衡组或递归这样的特性。支持这些特性的引擎的数量正在缓慢增长,但它们仍然不是普遍可用的。

这个也有用

re.findall(r'\(.+\)', s)

在处理嵌套模式和正则表达式是解决这类问题的正确工具时,我也陷入了这种情况。

/(\((?>[^()]+|(?1))*\))/

你需要第一个和最后一个括号。可以这样说:

str.indexOf (' (');-它会给你第一次发生

str.lastIndexOf (') ');-最后一个

所以你需要一个字符串,

String searchedString = str.substring(str1.indexOf('('),str1.lastIndexOf(')');