Stampferl: Regular Expressions

Hallo Allerseits!

Versuche gerade über Regular Expressions etwas zu finden.
Leider ist mir nicht ganz klar wie dazu die Syntax der Suche an sich lautet.
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?
...Wäre Klasse.

Viele Grüße
Alex

  1. Seid gegruesst!

    Natuerlich wissen unsere Lordschaft, was er schreiben muesste, aber da er sich so dumm anstellt, denken unsere Lordschaft, dass er besser SELFHTML aufmerksamer lesen oder sich ein gutes Buch kaufen sollte.
    Zumindest bei Perl und JavaScript werden die Teile, die in den runden Klammern eingeschlossen sind, in Spezial-Variablen gespeichert, die z.B. $1 heissen. Ist das bei VBScript etwa anders?
    So ware nach (name)(.+)(/name) der Name in der Spezial-Variablen $1 gespeichert.
    Haette er Perl, dann koennte ihm perldoc regexp helfen - da er aber offensichtlich ein Juenger Microsofts ist, wird er sich wohl mit der anscheinen lachhaft schlechten VBScript-Dokumenation herumschlagen muessen.

    Lord Helmchen

  2. 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

    1. Hallo Chriss!

      (name).+?(/name)

      Das wars! Vielen Dank und

      liebe Grüsse
      Alex!