PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Regulärer Ausdruck Negation


minos5000
2010-02-25, 09:15:43
Hi,

ich habe schon eine Weile im Netz danach gesucht, aber nichts passendes gefunden. Ich bin auf der Suche nach einer Möglichkeit Elemente in einem regulären Ausdruck zu negieren. Im Detail möchte ich darauf prüfen, dass ein String z.B. NICHT mit "abc" beginnt.

Ein simples negieren des Match Aufrufes ala "!Pattern.match()" ist nicht möglich, die Negation muss in dem Regex-Ausdruck geprüft werden. Ist so etwas überhaupt möglich?


Vielen Dank
minos

Monger
2010-02-25, 09:31:11
Das Zeichen dafür ist üblicherweise ^ (innerhalb von Character classes, also eckigen Klammern), also z.B. [^a-d]+ Wäre ein Wort, in dem alle Buchstaben vorkommen dürfen außer a, b, c oder d.


Siehe auch http://www.regular-expressions.info/

minos5000
2010-02-25, 09:37:53
Das Problem mit den eckigen Klammern ist, dass die Zeichen darin nirgends in dem Ausdruck vorkommen dürfen, ich will aber nur prüfen, dass Strings nicht mit einer best. Folge anfangen, danach dürfen die Zeichen ruhig vorkommen.

Monger
2010-02-25, 09:46:06
Du kannst theoretisch einen negative Lookbehind in Kombination mit einem Anchor nutzen.

Edit: Blödsinn: kein negative Lookbehind, sondern ein negative Lookahead: \b(?!abc)\w+
Habs grade ausprobiert, funktioniert zumindest bei mir ganz gut.

minos5000
2010-02-25, 10:25:24
Danke, habs ausprobiert und scheint zu funktionieren. Bin jetzt nur noch dabei nachzuvollziehen, was der Ausdruck im Detail macht, ich glaube, dafür werde ich noch eine Weile brauchen :-)

Monger
2010-02-25, 10:31:33
Schau dir die Webseite an die ich oben verlinkt habe. Die ist wirklich gut, vorallem die Referenz.

\b matcht immer am Wechsel zwischen \w und \W , also dem Wechsel zwischen Wörtern und Sonderzeichen. In dem Fall also dem Wortanfang. Dann schaut er, ob nach dem Wortanfang kein "abc" kommt, und anschließend eine Zeichenkette.