I have a string that I hope is a polynomial expression, something like "2x^2-3x+1
. I want to use a regex to group each term in the expression. I currently have "^(-?d?x(^d)?)+"
. I’m trying to capture a term as an optional minus sign, then a number, then x, then an optional exponent, which should be of the form “^someNumber”. So for my above polynomial, I’d want group 1 to be "2x^2"
, group 2 to be "-3x"
and group 3 to be "+1"
. Firstly, if I have (someGroupExpression)+
, will this generate a group for each someGroupExpression that occurs? Secondly, for the exponent part, I don’t want to have it be a nested group, as this would make it troublesome to loop through the term groups. How can I specify that the rules the exponent part should follow without making it a group? Please let me know if I can clarify the question.
Advertisement
Answer
To capture each sub expression in a group which is not nested or overlapping use the following regex.
Regex: ([+-]?[^-+]+)
Explanation: It will capture each sub expression of whole without overlapping each match.
Java Code
String exp = "2x^3+4x^2+5x-42"; Pattern pattern = Pattern.compile("([+-]?[^-+]+)"); Matcher matcher = pattern.matcher(exp); int x=0; while (matcher.find()) { x=x+1; System.out.println("Group "+x+": " + matcher.group(1)); }
A more robust regex which considers all sub-expressions would be:
Regex: ([+-]?(?:(?:d+x^d+)|(?:d+x)|(?:d+)|(?:x)))
Use \
in Java for double escaping. d
will become \d
, ^
becomes \^
.