RegExp
Jan
- programmiertechnik
Hallo,
ich suche nach einem regulären Ausdruck, der die Wörter "diesen Text darf er parsen" nur dann finden soll, wenn nicht das Wort "nein--" davorsteht. "diesen Text darf er parsen" kann natürlich ein beliebiger Text sein.
Vielen Dank!
Test1: diesen Text darf er parsen Ende
Test1: nein--diesen Text darf er nicht parsen Ende
Ich hatte mir sowas vorgestellt, aber das ist nicht korrekt, das weiß ich.
Test1: ^nein-- Ende
Test1: ^nein-- Ende
Evt. keine [] drum sondern (^(nein--))(.*)
Wozu * und ? hintereinander?
Gruss, Frank
Test1: ^nein-- Ende
Evt. keine [] drum sondern (^(nein--))(.*)
^ <- Das ist nur in eckigen Klammern ein Negator, sonst steht es für den Anfang.
Wozu * und ? hintereinander?
Vermutlich damit es das macht, was es soll, Stichwort gieriges Verhalten, siehe Link in meinem anderen Beitrag.
Hi Texter mit x ...
Ja, stimmt, da war irgendwas mit ^ als Anfang ... die Negation von () ist mir grad entfallen ... zuviel Gummibärchenlimonade und Gummibärchen selbst. ;)
Danke für den Link. :)
Ciao, Frank
ich suche nach einem regulären Ausdruck, der die Wörter "diesen Text darf er parsen" nur dann finden soll, wenn nicht das Wort "nein--" davorsteht.
So in etwa: '/(?<!nein--)diesen Text darf er parsen/'
siehe da, http://www.devmag.net/webprog/regulaere_ausdruecke.htm
gudn tach!
ich suche nach einem regulären Ausdruck, der die Wörter "diesen Text darf er parsen" nur dann finden soll, wenn nicht das Wort "nein--" davorsteht.
So in etwa: '/(?<!nein--)diesen Text darf er parsen/'
genau.
allerdings ist
imho keine gut erklaerende seite. besser sind da z.b. das perl-manual, sowie das php-manual:
http://perldoc.perl.org/perlre.html
http://de3.php.net/manual/en/regexp.reference.php
prost
seth
Danke für die Tipps.
Der Text "diesen Text darf er parsen" kann ja variieren. Leider sind nun mit diesem RegExp beide Zeilen erfüllt.
/Test1: (?<!nein--)(.*?) Ende/
Test1: diesen Text darf er parsen Ende
Test1: nein--diesen Text darf er nicht parsen Ende
Habt Ihr noch einen Tipp`?
/Test1: (?!nein--)(.*?) Ende/
scheint zu gehen.
(?!xxx)
Negiert das angegebene Pattern und wirkt sich auf das vorangehende aus.
Beispiel: /text1(?!text2)/
Trifft auf eine Zeichenkette zu, die "text1" enthält, aber kein "text2" danach.
gudn tach!
/Test1: (?!nein--)(.*?) Ende/
scheint zu gehen.
ja, denn das bedeutet, dass nach dem string "Test1: " nicht direkt der string "nein--" folgen darf.
es wuerde aber z.b. schon ein leerzeichen mehr genuegen, also
Test1: nein-- foo Ende
um die verneinung zu umgehen. je nach anwendung wird das egal sein. ich sag's bloss sicherheitshalber mal dazu.
prost
seth
gudn tach!
/Test1: (?<!nein--)(.*?) Ende/
du hast dir zwar mittlerweile schon eine loesung erarbeitet, dennoch kurz fuer's archiv die erklaerung, dass obiger regexp _niemals_ matchen kann:
(?<!schwazze) ist eine zero-width negative look-behind assertion, das heisst
/(?<!schwazze)schoggo/
matcht ein "schoggo", dem kein "schwazze" voransteht. das "schwazze" selbst wird nicht gematcht.
print $1 if 'weisseschoggo'=~/((?<!schwazze)schoggo)/;
liefert also "schoggo".
dagegen liefert
print $1 if 'weisseschoggo'=~/(weisse(?<!schwazze)schoggo)/;
tatsaechlich "weisseschoggo", allerdings wird hier auch deutlich, dass "(?<!schwazze)" hier nun voellig ueberfluessig ist, da ja bereits verlangt wird, dass vor dem "schoggo" der string "weisse" steht. somit kann ja auch gar nicht mehr "schwazze" vor "schoggo" stehen.
deshalb ist der ausdruck
/(weisse(?<!schwazze)schoggo)/
aequivalent zu
/(weisseschoggo)/
und somit ist
/Test1: (?<!nein--)(.*?) Ende/
aequivalent zu
/Test1: (.*?) Ende/
d.h., das "nein--" wird gar nicht beachtet.
prost
seth
Der Text "diesen Text darf er parsen" kann ja variieren.
Die RegExp auch. Da Du was finden wolltest, dachte ich Du würdest jeweils wissen was Du finden willst, auch wenn es variiert.