Hallo,
ich stoße gerade auf folgendes Problem beim Umgang mit regulären Ausdrücken:
In Alternationen, wie "(a|ab|b)" geht die Engine normalerweise so vor, dass der erste matchende Ausdruck zuschlägt und alle anderen nicht mehr betrachtet werden (hier: wenn a matcht, wird ab nicht betrachtet). Das ist auch das Verhalten, was ich haben möchte. Dies scheint in einer Lookbehind-Gruppe anders zu sein. Folgendes Beispiel:
(?<=(Hello World|World))\s\d{4}
Ich suche alle vierstelligen Zahlen, denen entweder "World" oder "Hello World" vorangestellt ist. Welcher Ausdruck nun davor stand, möchte ich durch Abfrage der ersten Gruppe erfragen. In folgendem Text wird jedoch nicht "Hello World", wie ich es erwartet habe, sondern "World" durch die Gruppe gematcht:
Hello World 2000
Offenbar wird also im Lookbehind nicht nach der Reihenfolge vorgegangen, sondern nach der Länge. Ich möchte jedoch nicht den kürzesten möglichen Ausdruck finden, sondern den längsten (deswegen hatte ich die Alternation extra absteigend nach Länge sortiert).
Irgendeine Idee?
PS: Ich verwende Java 6
ich stoße gerade auf folgendes Problem beim Umgang mit regulären Ausdrücken:
In Alternationen, wie "(a|ab|b)" geht die Engine normalerweise so vor, dass der erste matchende Ausdruck zuschlägt und alle anderen nicht mehr betrachtet werden (hier: wenn a matcht, wird ab nicht betrachtet). Das ist auch das Verhalten, was ich haben möchte. Dies scheint in einer Lookbehind-Gruppe anders zu sein. Folgendes Beispiel:
(?<=(Hello World|World))\s\d{4}
Ich suche alle vierstelligen Zahlen, denen entweder "World" oder "Hello World" vorangestellt ist. Welcher Ausdruck nun davor stand, möchte ich durch Abfrage der ersten Gruppe erfragen. In folgendem Text wird jedoch nicht "Hello World", wie ich es erwartet habe, sondern "World" durch die Gruppe gematcht:
Hello World 2000
Offenbar wird also im Lookbehind nicht nach der Reihenfolge vorgegangen, sondern nach der Länge. Ich möchte jedoch nicht den kürzesten möglichen Ausdruck finden, sondern den längsten (deswegen hatte ich die Alternation extra absteigend nach Länge sortiert).
Irgendeine Idee?
PS: Ich verwende Java 6
Zuletzt bearbeitet: