PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : preg_match_all


CrAnE
06.05.2007, 19:32:18
Hallo,

wie kann man mit regulären ausdrücken nach diesem muster suchen?

...(.*) (Variable1)...... ($1)

Also im wärend der suche eine schon gefundene Variable verwenden?

mfg Jan

Serp
06.05.2007, 21:30:31
http://de.php.net/manual/de/reference.pcre.pattern.syntax.php

Kurze Zusammenfassung des für dich relevanten: Mit () gruppierst du einen Teil und merkst dir den Inhalt, mit \# greifst du auf den entsprechenden Teil zurück, wodurch # durch die entsprechende Zahl der Gruppierung zu ersetzen ist (d.h. Anzahl der öffnenden Klammern von links).

CrAnE
07.05.2007, 07:07:57
Ich glaube was ich versuche ist garnicht möglich... Ich muss im such pattern eine variable benutzen die ich bereits gefunden habe also so in der art

\((.*)\) (.*) \(($1)\)
(Die äußeren klammern sollten escaped sein aber das schluckt das board ;))

Versteht ihr jetzt was ich versuche?

Edit: Ich habe das ganze mal mit Regex Coach ausprobiert.... wenn ich \1 im search pattern verwende kommt diesre damit klar und er erkennt alles so wie es sein soll, PHP kommt damit jedoch überhaupt nicht klar.. woran liegt das?

mfg Jan

Serp
07.05.2007, 17:14:15
Verwendest du unter PHP denn auch \1 oder $1?

CrAnE
08.05.2007, 10:43:22
Ich verwende \1

meine aktueelle version siht ungerfähr so aus:

%\1((.*)\)(.*)\(\1\)%

wo ist da der fehler?


mfg Jan

xabbuh
08.05.2007, 14:53:51
meine aktueelle version siht ungerfähr so aus:

%\1((.*)\)(.*)\(\1\)%

wo ist da der fehler?
Was soll denn das \1 ganz am Anfang deines regulären Ausdrucks?

CrAnE
08.05.2007, 17:40:22
Uh das habe ich nicht drinne.. ich konnte nur in der Schule an unserem Terminal in der Kafeterie schreiben und da musste ich mit copy und paste schreiben...


%\((.*)\){(.*)}\(\1\)%


So das ist nun aus dem Code kopiert.. wie gesagt in Regex Coach läuft der Code aber in PHP nicht und das verstehe ich nicht!

xabbuh
08.05.2007, 21:24:54
Warum zeigst du dann nicht mal den zugehörigen PHP-Code? Anscheinend vermurkst du dir damit ja irgendetwas.

CrAnE
09.05.2007, 07:12:13
$output =
"%(test){ Hello world }(test)%
";

if(preg_match_all("/%\((.*)\){(.*)}\(\1\)%/smU", $output, $preg_vars, PREG_PATTERN_ORDER)){
echo 'na endlich...';
}else{
echo 'schade...';
}
echo '<pre>';
print_r($preg_vars);
echo '</pre>';

CrAnE
12.05.2007, 09:00:31
Keine idee xabbuh? Ich verstehe einfach nicht warum das nix funktioniert. Bitte nochmal drüber gucken, mit dem code könnte ich viel leistung sparen.

mfg Jan

xabbuh
12.05.2007, 12:06:48
Keine idee xabbuh?
Ruhig Blut, ab und zu muss man sich auch ein paar Tage Auszeit gönnen.

Ich verstehe einfach nicht warum das nix funktioniert. Bitte nochmal drüber gucken, mit dem code könnte ich viel leistung sparen.
Entweder musst du den regulären Ausdruck in einfache Anführungszeichen packen oder \1 escapen (\\1).

CrAnE
12.05.2007, 12:18:46
Das mit dem escapen hat gehoflen! Vielen vielen Dank!!!

CrAnE
16.05.2007, 17:16:42
Hallo,

ich habe nun noch ein neues Problem!

Er arbeitet zwar jetzt schon ganz effizient jedoch macht es probleme bei verschachtelungen

habe ich also %(test){ %(test2){ }(test2)% }(test)% gibt es probelem und es wird nur das äußere gefunden! Gibt es da eine Pregex lösung oder muss ich die ergebnisse nochmal durch nen preg_match laufen lassen?

mfg Jan