In RegExp selbs auf Match-Variable verweisen
snorri
- php
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:
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
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
@@snorri:
nuqneH
OK, ich habe es inzwischen selbst gefunden. Das entscheidende Stichwort heisst "backreference";
Und BTW, sowas ist kein regulärer Ausdruck.
Qapla'
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
@@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'