Hallo Bernd, * Bernd schrieb am 07.09.2003:
* Thorsten Haude schrieb am 06.Sep.2003:
Moin,
* 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.
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. Noch wahrscheinlicher wäre es, wenn die leere Zeichenkette am Zeilenanfang ersetzt würde.
Die Zeichenkette muß ja nicht die gleiche Länge haben.
Soweit ich weiß, arbeiten RegExes standardmäßig im Greedy-Modus, d.h. es wird soviel gematcht, wie möglich. Beim obigen Ausdruck passt es, dieser Ausdruck matcht auf "raboof". Warum sollte obiger Ausdruck denn auf ein einzelnes "f" matchen? Es sind auch noch runde Klammern da und da wird das Ganze "foo" genommen. Grüße, Tom