Ich mag würde eine Regex erstellen, so dass ich eine Zeichenfolge in Java mit folgenden Einschränkungen aufteilen:Java Regex: Splitting basierend auf mehreren Bedingungen mit Ausnahmen
Any non-word character, except for:
(a) Characters surrounded by ' '
(b) Any instance of := >= <= <> ..
Damit für das folgende Beispiel string:
print('*'); x := x - 100
ich kann das folgende Ergebnis in einem String[]
erhalten:
print
(
'*'
)
;
x
:=
x
-
100
Dies ist die regex Ich habe derzeit so weit:
str.split("\\s+|"+
"(?=[^\\w'][^']*('[^']*'[^']*)*$)|" +
"(?<=[^\\w'])(?=[^']*('[^']*'[^']*)*$)|" +
"(?=('[^']*'[^']*)*$)|" +
"(?<=')(?=[^']*('[^']*'[^']*)*$)");
Aber das gibt mir folgendes Ergebnis:
print
(
'*'
)
;
x
:
= <!-- This is the problem. Should be above next to the :
x
-
100
UPDATE
ich jetzt habe gelernt, dass es nicht möglich ist, zu erreichen, dies mit Regex.
Ich kann jedoch immer noch keine externen oder Frameworks oder Lexer verwenden und muss Java-Methoden wie StringTokenizer verwenden.
Sie können nicht tun (a) mit einem regulären Ausdruck, period. Eine Sprache mit übereinstimmenden Trennzeichenpaaren ist keine reguläre Sprache. Sie müssen einen richtigen Lexer schreiben/verwenden. – OrangeDog
kann er nicht Lookback und Lookforward in irgendeiner Weise verwenden? – Gus
@OrangeDog Aber es funktioniert gut mit der aktuellen Regex, jedoch nur mit einer der beiden Einschränkungen. Ist es nicht möglich, eine zusätzliche Regex für Constraint '(2)' hinzuzufügen? –