snorri: In RegExp selbs auf Match-Variable verweisen

Hi alle,

kann ich in einer RegExp auf die Werte verweisen, die ich innerhalb den gleichen Ausdrucks zuvor über die runden Klammern ausgelesen habe?

Beispiel:

Aus dem String

"Anfang1 foo foo foo Ende1 Anfang2 bar bar bar Ende2"

möchte ich alles zwischen einem "AnfangX" und dem zugehörigen "EndeX" auslesen, also:

  • "foo foo foo"
  • "bar bar bar"

Der Ausdruck muss verhindern, dass ich stattdessen den Text zwischen "AnfangX" und "EndeY" erhalte.

Ich würde suchen nach "/Anfang(\d*)(.*)Ende___/" -- aber was müsste an Stelle des ___ stehen, damit es sich auf das Ergebnis von (\d*) bezieht? ($1 sozusagen)

Danke!

-- snorri

  1. OK, ich habe es inzwischen selbst gefunden. Das entscheidende Stichwort heisst "backreference"; wenn man das weiß findet man die Antwort schnell:

    "/Anfang(\d*)(.*)Ende\1/"

    Mit "\1" referenziert man den Inhalt der ersten runden Klammern usw.

    -- snorri

    1. @@snorri:

      nuqneH

      OK, ich habe es inzwischen selbst gefunden. Das entscheidende Stichwort heisst "backreference";

      Und BTW, sowas ist kein regulärer Ausdruck.

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
      1. gudn tach!

        OK, ich habe es inzwischen selbst gefunden. Das entscheidende Stichwort heisst "backreference";

        Und BTW, sowas ist kein regulärer Ausdruck.

        begriffe koennen je nach anwendungsgebiet verschiedene bedeutungen haben.
        das ist zwar kein regulaerer ausdruck im sinne der theoretischen informatik, aber in der programmierung (und darum geht es hier offensichtlich dem op) werden darunter sehr wohl auch solche ausdruecke verstanden.
        wird uebrigens auch so in der wikipedia (en, de) beschrieben.

        prost
        seth

    2. @@snorri:

      nuqneH

      "/Anfang(\d*)(.*)Ende\1/"

      Wenn du das auf "Anfang1 foo foo foo Ende1 Anfang1 bar bar bar Ende1" anwendest, dann wird wohl " foo foo foo Ende1 Anfang1 bar bar bar " gefunden, weil Suchmuster (ohne weiteres Zutun) http://de.selfhtml.org/perl/sprache/regexpr.htm#gierig_genuegsam@title=gierig sind.

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)