我有一些像这样的字符串:
(((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/