java - 如何使用 Java 正则表达式捕获带括号的组

标签 java regex

我有一些像这样的字符串:

(((a * b) + c) * d)

并希望使用 java 正则表达式捕获带括号的组。我认为这个简单的正则表达式

Pattern p = Pattern.compile("\\((.*)\\)",Pattern.DOTALL);

会做这个工作,但它没有。

这有什么问题吗?

最佳答案

不幸的是,您尝试使用正则表达式定义的语言闻起来不规则,即正则表达式不适合这种类型的表达式。 (准确地说,“均衡的括号”不是你可以用正则表达式定义的东西。)

如果您只是想在您的示例中查找子字符串 a * b,则应执行以下表达式:

Pattern p = Pattern.compile("\\(([^()]*)\\)");
Matcher m = p.matcher("(((a * b) * ) + c) * d)");
if (m.find())
    System.out.println(m.group(1));   // prints "a * b"

关于java - 如何使用 Java 正则表达式捕获带括号的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4346355/

相关文章:

java.io.NotSerializedException : java. 时间.format.DateTimeFormatter

java - 大多数类似 MySQL 的与 hibernate 兼容的内存数据库?

java - mvn clean install 不要使用最后的 .class 版本

java - 使用角色注释进行保护不起作用( Jersey )

python - 从长队中获取所有组

R提取第n个和第i个分隔符实例之间的字符串

java - 如何为 HTML 简单文本制作正则表达式模式?

java - 如何让 Sprite 从 Android 中的 gameView 边缘反弹?

javascript - 从当前 url javascript 获取字符串斜杠后的值

regex - 如何在正则表达式中的字符之前停止匹配