Regex: Doppelter Teil
Thomas
- php
0 Beat0 MudGuard0 Thomas0 Texter mit x0 Thomas
0 Beat
0 Texter mit x
Hallo,
beschäftige mich gerade mit zum erstem Mal mit Regular Expressions in PHP:
Ich habe eine Variable mit folgender Struktur als Inhalt:
$text="text {array:daten} hallo{/array:daten} vieltext";
Jetzt möchte ich alles, was zwischen den array:-Klammern steht auslesen:
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*){/array:$1}!",$text,$list);
Problem an der Sache: Wie mache ich dem klar, das ich genau die Angaben will, bei denen hinter dem Doppelpunkt dasselbe steht. Bei einem ersetzen würde müsste es ja mit $1 gehen, wie es beim auslesen gehen soll, weiß ich nicht.
Für Hinweise wäre ich dankbar.
Thomas
$text="text {array:daten} hallo{/array:daten} vieltext";
Jetzt möchte ich alles, was zwischen den array:-Klammern steht auslesen:
Problem an der Sache: Wie mache ich dem klar, das ich genau die Angaben will, bei denen hinter dem Doppelpunkt dasselbe steht. Bei einem ersetzen würde müsste es ja mit $1 gehen, wie es beim auslesen gehen soll, weiß ich nicht.
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\2}!",$text,$list);
$1 $2 $3 ^ $4 \2
mit \2 statt $1 oder $2
nimm .*? statt .*
Wenn du einen Ausdruck nicht speichern willst, verwende
(?: ) statt ()
mfg Beat
Hi,
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\2}!",$text,$list);
$1 $2 $3 ^ $4 \2
Wie kommst Du darauf, daß geschweifte Klammern capturing bewirken?
cu,
Andreas
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\2}!",$text,$list);
$1 $2 $3 ^ $4 \2Wie kommst Du darauf, daß geschweifte Klammern capturing bewirken?
Tja mit Glück zoome ich mal so weit hoch, dass ich den Unterschied sehe.
Mal schauen, was ich gegen den beschissenen monospace font hier tun kann,
mfg Beat
Wie kommst Du darauf, daß geschweifte Klammern capturing bewirken?
Tja mit Glück zoome ich mal so weit hoch, dass ich den Unterschied sehe.
Mal schauen, was ich gegen den beschissenen monospace font hier tun kann,
Ich habe jetzt die CSS Regel gesetzt
#nachrichten-text{font-family:"DejaVu Sans Mono";}
Das sieht jetzt bedeutend lesbarer aus.
mfg Beat
»» $text="text {array:daten} hallo{/array:daten} vieltext";
»» Jetzt möchte ich alles, was zwischen den array:-Klammern steht auslesen:»» Problem an der Sache: Wie mache ich dem klar, das ich genau die Angaben will, bei denen hinter dem Doppelpunkt dasselbe steht. Bei einem ersetzen würde müsste es ja mit $1 gehen, wie es beim auslesen gehen soll, weiß ich nicht.
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\2}!",$text,$list);
$1 $2 $3 ^ $4 \2mit \2 statt $1 oder $2
nimm .*? statt .*Wenn du einen Ausdruck nicht speichern willst, verwende
(?: ) statt ()mfg Beat
Funktioniert leider nicht:
<?
$text="viel text {array:daten} hallo{/array:daten} vieltext";
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\2}!",$text,$list);
print_r($list);
?>
liefert folgendes Ergebnis:
http://vfb-stuttgart.piranho.de/test.php
$text="viel text {array:daten} hallo{/array:daten} vieltext";
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\2}!",$text,$list);print_r($list);
?>[/code]liefert folgendes Ergebnis:
http://vfb-stuttgart.piranho.de/test.php
Das glaube ich Dir nicht.
Doch, war aber so, habe jetzt aber den Fehler gefunden.
Statt \2 muss es \2 heißen, dann funktioniert es.
Doch, war aber so, ...
Dann "lügst" Du was den Inhalts von $text betrifft. Wenn der Code die angeblichen Ausgaben nicht hervorrufen kann und man erahnen muß, was Du statt deinem Beispiel in Wirklichkeit benutzt hast, dann dämpft das meinen Willen mich damit zu beschäftigen.
Funktioniert leider nicht:
Ich hatte im ersten Posting {} und () visuell nicht auseinander halten können.
[code lang=php]<?
$text="viel text {array:daten} hallo{/array:daten} vieltext";
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\2}!",$text,$list);
preg_match_all("!{array:([a-zA-Z0-9]*)}(.*?){/array:\1}!",$text,$list);
maskiere die { }, schon alleine meinen Augen zuliebe,
wenn du sie nicht als Quantifikatoren brauchst.
Die Backreferenz sollte $1 jetzt matchen, ergo \1
in perl OK
my $a="viel text {array:daten} hallo{/array:daten} vieltext";
$a =~ m!{array:([a-zA-Z0-9]*)}(.*?){/array:\1}! and print $1, $2;
mfg Beat
Wenn man von deinem Beitrag in München mit zehn Minuten ohne daß man am Flughafen noch einchecken muß dann startet man im Grunde genommen am Flughafen ...
Problem an der Sache: Wie mache ich dem klar, das ich genau die Angaben will, bei denen hinter dem Doppelpunkt dasselbe steht.
Ist das "dasselbe steht" eine Beschreibung oder eine Bedingung?