![](https://seccdn.libravatar.org/avatar/2a347b18c06ada0bdb2501b5a3e9a8cf.jpg?s=120&d=mm&r=g)
Moin, * Bernd Brodesser <B.Brodesser@t-online.de> [2003-09-07 09:27]:
* Thorsten Haude schrieb am 06.Sep.2003:
* Bernd Brodesser <B.Brodesser@t-online.de> [2003-09-06 03:52]:
* Thorsten Haude schrieb am 06.Sep.2003:
* Bernd Brodesser <B.Brodesser@t-online.de> [2003-09-04 11:40]:
Du siehst, es ist nicht eingrenzbar.
Es ist schon eingrenzbar, warum auch nicht? 'Finde alle Zeilen, die blabla enthalten, aber nicht mit foobar anfangen.' Geht doch.
Ein RegEx findet keine Zeilen, sondern Textpassagen.
Dann aber Textpassagen, die einen Zeilenanfang und ein Zeilenende enthalten.
Nö, wieso? Kann, aber muß nicht sein.
Ach, jetzt verstehe ich, worauf Du hinaus willst. Jaja, es sind Textpassagen. Ist das für das Problem entscheidend?
Ein bischen viel, oder nicht?
Ich kann Dir nicht folgen.
Nimm doch mal als Beispiel:
s/^!(foo)/bar/
Hierbei soll !(foo) das erwähnte nicht foo bedeuten. Der ^ steht wie gewohnt für den Zeilenanfang. Laß da mal foobaz drüber laufen. Was passiert denn wohl? Da steht zwar foo am Anfang, aber es steht auch fo oder f am Anfang und das ist nicht foo. Also wird doch das f, am Zeilenanfang, daß ja nicht foo ist durch bar ersetzt und Du erhälst baroobaz und das ist doch nicht gewollt.
Darum macht man es mit look-ahead oder look-behind. Damit kannst Du nicht-atomare Bedingungen stellen, die dann keine Zeichen verbrauchen, aber mehrere Zeichen überprüfen können. Mit einem negativen look-behind klappt es, jedenfalls soweit es das ursprüngliche Beispiel angeht. Mit einem negativen look-ahead kann man Dein Problem lösen: ^(?!foo) Das scheint zu funktionieren, barbar wird gefunden, foobar nicht. Thorsten -- Ein Staat, der die Wuerde des Menschen oder die körperliche Unversehrtheit nicht achtet, macht das nicht lange, wenn es noch Meinungsfreiheit gibt. Umgekehrt zieht die Abschaffung der Meinungsfreiheit aber die Abschaffung anderer Menschenrechte zwangsläufig nach sich. - Rolf Weber