2017-03-22 11 views
2

Ich habe versucht, die Standard-Look-ahead-Methoden zum Negieren einer Regex, die ich für einen Gleichungslöser verwende. Das Problem ist, dass es nicht funktioniert.Negieren einer komplexen Regex

die Probe Gleichung: 1 + 2x5 + 3x4

I the2 Instanzen der Multiplikation isolieren will. Ich möchte {1+, +} in einem Array und {2x5, 3x4} in dem anderen.

Ich verwendet split ("\\ d + x \\ d"), um das erste Array zu erhalten, aber kann diese Regex nicht erfolgreich negieren, um das andere zu erhalten. Danke für Ihre Zeit, jede Hilfe geschätzt!

+0

@LutzL Wie ist die Antwort auf diese Frage direkt relevant? –

Antwort

0

Ich kann nicht an einen Einzeiler denken, der die Multiplikationsbedingungen ergibt, aber es ist ziemlich einfach, sie mit einem Matcher zu extrahieren.

String input = "1+2x5+3x4"; 
// you already found a way to identify the non multiplication terms 
String[] first = input.split("\\d+x\\d+"); 

String pattern = "(\\d+x\\d+)"; 
Pattern p = Pattern.compile(pattern); 
Matcher m = p.matcher(input); 
List<String> second = new ArrayList<>(); 
while (m.find()) { 
    second.add(m.group(1)); 
    System.out.println(m.group(1)); 
} 

Beachten Sie, dass Sie in der Regel sollen wohl einen komplexen arithmetischen Ausdruck einen Parser zu handhaben werden. Dieser Parser kann intern regex stark verwenden, aber die Verwendung von regex alleine wird nicht gut funktionieren, sobald Sie verschachtelte Klammern erhalten.

Ausgang:

2x5 
3x4 
+0

Hey Tim, vielen Dank! Ich habe Parser noch nicht angeschaut, werde es jetzt aber definitiv tun. Ich hatte vor, mich mit Klammern zu beschäftigen, sobald ich die grundlegende Reihenfolge der Operationen definiert hatte. Ich gebe das eine Chance! – Joel