java如何处理正则表达式中的多个括号?
我有这种类型的字符串:
文本(更多文本)
我想做的是用一个正则表达式来提取字符串的“更多文本”段。到目前为止,我一直在使用这个正则表达式:
"^.*\\((.*)\\)$"
虽然它在很多情况下都有效,但如果我有这样的东西,它似乎失败了:
文本(更多文本(更多文本))
我得到的是:更多的文本)
我想要的是: 更多文本(甚至更多文本)(基本上是最外面一对括号的内容。)
你可以在下面搜索框中键入要查询的问题!
我有这种类型的字符串:
文本(更多文本)
我想做的是用一个正则表达式来提取字符串的“更多文本”段。到目前为止,我一直在使用这个正则表达式:
"^.*\\((.*)\\)$"
虽然它在很多情况下都有效,但如果我有这样的东西,它似乎失败了:
文本(更多文本(更多文本))
我得到的是:更多的文本)
我想要的是: 更多文本(甚至更多文本)(基本上是最外面一对括号的内容。)
# 1 楼答案
试试这个:
"^.*?\\((.*)\\)$"
# 2 楼答案
真正的正则表达式不能计算括号;这需要一个下推自动机。一些正则表达式库有支持这一点的扩展,但我认为Java没有(可能是错误的;Java不是我的堡垒)
顺便说一句,到目前为止,我看到的其他答案将与给出的示例一起使用,但会与
text (more text (even more text)) (another bit of text)
等答案相冲突。贪心的改变并不能弥补数数的能力# 3 楼答案
除了懒惰量化,另一种方法是:
在这两个正则表达式中,在匹配组的前面有一个显式指定的左括号(
"\\("
,带有Java字符串转义)。在最初的版本中,在那之前有一个.*
,允许任何内容(包括其他左括号)。在我的例子中,这里不允许使用左括号(这里有一个negated character class),所以在最外层显式指定左括号