Christian Spaeth: Regular Expressions

Beitrag lesen

Hi,

Ein Beispiel:
Text: "Hallo ich bin (name)Alex..(/name) und nicht (name)Micha(/name)"
Aus diesem Text möchte ich alles finden, was zwischen (name) und (/name) steht inkl. Zeilenümbruche und sonstiges - und dieses durch etwas anderes ersetzen.
Bisher habe ich folgendes dafür verwendet:
(name).+(/name)
Das Ergebnis davon ist aber: "(name)Alex..(/name) und nicht (name)Micha(/name)"
Ich hätte aber gerne folgendes als Ergebnis:
"Alex"
"Micha"

Weiss jemand, wie man das schreiben muss?

Ich schätze, dein Problem hängt mit der "gierigkeit" deiner RE zusammen:

Die RE versucht alles zw. "(name)" und "(/name)" zu finden.
Für * oder + versucht eine RE möglichst *viele* Zeichen zu finden. (Das nennt man "Greedy"). Wenn du nun die kleinst mögliche Anzahl an
Zeichen finden möchtest solltest du den "non-greedy"-Operatror "?" benutzen. Wenn du ein ? nach einem * oder + folgen lässt, wird die kleinst mögliche Anzahl Zeichen gefunden.

In deinem Beispiel sähe das dann so aus:

(name).+?(/name)

Hoffe das hilft dir weiter...

Gruss
   Chriss