有 Java 编程相关的问题?

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

java如何处理正则表达式中的多个括号?

我有这种类型的字符串:

文本(更多文本)

我想做的是用一个正则表达式来提取字符串的“更多文本”段。到目前为止,我一直在使用这个正则表达式:

"^.*\\((.*)\\)$"

虽然它在很多情况下都有效,但如果我有这样的东西,它似乎失败了:

文本(更多文本(更多文本))

我得到的是:更多的文本)

我想要的是: 更多文本(甚至更多文本)(基本上是最外面一对括号的内容。)


共 (3) 个答案

  1. # 1 楼答案

    试试这个:

    "^.*?\\((.*)\\)$"

  2. # 2 楼答案

    真正的正则表达式不能计算括号;这需要一个下推自动机。一些正则表达式库有支持这一点的扩展,但我认为Java没有(可能是错误的;Java不是我的堡垒)

    顺便说一句,到目前为止,我看到的其他答案将与给出的示例一起使用,但会与text (more text (even more text)) (another bit of text)等答案相冲突。贪心的改变并不能弥补数数的能力

  3. # 3 楼答案

    除了懒惰量化,另一种方法是:

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

    在这两个正则表达式中,在匹配组的前面有一个显式指定的左括号("\\(",带有Java字符串转义)。在最初的版本中,在那之前有一个.*,允许任何内容(包括其他左括号)。在我的例子中,这里不允许使用左括号(这里有一个negated character class),所以在最外层显式指定左括号