如何定义模式以在花括号中查找所有表达式

时间:2019-01-25 23:31:48

标签: java regex

String input = (1+(4+5+2)-3)+(6+8)

如何定义可以给出

的正则表达式

4 + 5 + 2和6 + 8。

String pattern = "(\\([\d\\+\\-]\\))";

似乎没有用。

2 个答案:

答案 0 :(得分:0)

您可以执行\(([^\(\)]+)\),但它只会在括号内找到最里面的东西。您可以输入以下内容

(1+(4+((5*2)+3)+2)-3)+(6+8)

结果将是

Match 1
Full match  7-12    (5*2)
Group 1.    8-11    5*2

Match 2
Full match  22-27   (6+8)
Group 1.    23-26   6+8

如果可能,您应该尽量不要使用正则表达式

答案 1 :(得分:0)

在正则表达式(\\([\d\\+\\-]\\))中,您必须使用+之类的quantifier来重复字符类,并注意在character class内的加号不必是转义,连字符也不必转义,因为它是字符类的最后一个字符。

您的正则表达式看起来像(\\([\d+-]+\\)),但其中还包括匹配外部括号。

您可能要做的是将捕获括号放在内部,以便与外部括号匹配,并使内部括号作为捕获组,以便您想要的值在该组中。

字符类[\d+-]+也将与例如---匹配,我认为这不是您想要的。例如,您可以先匹配数字,然后再匹配+-的重复模式,然后再匹配数字以保持表达式的结构。例如:

\\((\\d+(?:[+-]\\d+)+)\\)

说明

  • \\(匹配(
  • (捕获组
    • \\d+匹配1个以上的数字
    • (?:[+-]\\d+)+非捕获组,匹配+-,然后匹配1+位数字并重复1+次。
  • )关闭捕获组
  • \\)匹配)

Regex demo