String input = (1+(4+5+2)-3)+(6+8)
如何定义可以给出
的正则表达式4 + 5 + 2和6 + 8。
String pattern = "(\\([\d\\+\\-]\\))";
似乎没有用。
答案 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+次。)
关闭捕获组\\)
匹配)