Ich habe mal eine Regexfrage in Bezug auf reguläre Ausdrücke, welche ausschließlich Additionen / Multiplikationen umfassende Rechenoperationen ganzer Zahlen beschreiben sollen.
Z. B. soll "12*1+2=2" matchen, "12*1+A=2" und "12*1-2=2" nicht.
"[0-9]+[+|*][0-9]+([+|*][0-9]+){0,}=[0-9]+" bedeutet dabei Folgendes:
"Ein oder mehrere Zahlen gefolgt von Plus oder Mal gefolgt von ein oder mehreren Zahlen...
...dies kann ergänzt werden durch: Plus oder Mal gefolgt von ein oder mehreren Zahlen, und das 0 bis n mal."
Jetzt wollte ich das durch Klammern ergänzen, um etwa (2+3) * 7 zu prüfen.
Aber wie soll ich das schaffen? Denn ich weiß nicht, wie ich einem Ausdruck wie
"(\\()[0-9]+[+|*][0-9]+(\\))([+|*](\\()[0-9]+(\\))){0,}=[0-9]+"
die öffnenden und die schließenden Klammern aufeinander abstimmen soll. Damit meine ich: Wenn eine öffnende Klammer bei (2+3) * 7 vorhandne, ist, darf die schließende ja auch nicht fehlen, das muss aufeinander abgestimmt sein.
Kann man da mit irgendeinem grouping arbeiten, also gibt es da einen grouping hack oder ist all dies ein Ding der Unmöglichkeit?
Z. B. soll "12*1+2=2" matchen, "12*1+A=2" und "12*1-2=2" nicht.
Code:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String addition = "12*1+2=2";
Matcher m = Pattern.compile("[0-9]+[+|*][0-9]+([+|*][0-9]+){0,}=[0-9]+").matcher(addition);
if(m.matches()){
System.out.println("It matches.");
}
}
}
"[0-9]+[+|*][0-9]+([+|*][0-9]+){0,}=[0-9]+" bedeutet dabei Folgendes:
"Ein oder mehrere Zahlen gefolgt von Plus oder Mal gefolgt von ein oder mehreren Zahlen...
...dies kann ergänzt werden durch: Plus oder Mal gefolgt von ein oder mehreren Zahlen, und das 0 bis n mal."
Jetzt wollte ich das durch Klammern ergänzen, um etwa (2+3) * 7 zu prüfen.
Aber wie soll ich das schaffen? Denn ich weiß nicht, wie ich einem Ausdruck wie
"(\\()[0-9]+[+|*][0-9]+(\\))([+|*](\\()[0-9]+(\\))){0,}=[0-9]+"
die öffnenden und die schließenden Klammern aufeinander abstimmen soll. Damit meine ich: Wenn eine öffnende Klammer bei (2+3) * 7 vorhandne, ist, darf die schließende ja auch nicht fehlen, das muss aufeinander abgestimmt sein.
Kann man da mit irgendeinem grouping arbeiten, also gibt es da einen grouping hack oder ist all dies ein Ding der Unmöglichkeit?