2.2k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo,
ich habe ein kleines Script mit einem regulären Ausdruck.

$match = array();
$text = "%Variable1% und %Variable2% werden benutzt.";
preg_match("/\%(.*)\%/", $text, $match);


ich möchte, dass alle Variablen, die durch ein % gekennzeichnet sind, in das Array Match gespeichert werden.
Leider wird bei mir in Match nur ein Wert, nämlich %Variable1% und %Variable2% gespeichert, also gibts wohl Probleme bei der Trennung.

Kann mir vielleicht jemand sagen wie der Ausdruck richtig ausschaut?

Vielen Dank
luac

5 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Dazu muss die Suchsyntax ungierig werden.
Außerdem würde ich sie so erweitern, dass der Variablenname selbst kein Prozentzeichen enthalten darf. Vor dem Benutzen der Funktion ein Feld aufzubauen ist unnötig:

$text= '%Variable1% und %Variable2% werden benutzt.';
if ( preg_match( '#%([^%]+)%#U', $text, $match ) ) {
print_r( $match );
} else print( 'nichts gefunden' );
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Übersehen: und preg_match_all() verwenden, da preg_match() nach dem ersten Treffern aufhört.
0 Punkte
Beantwortet von
Hallo,
vielen Dank, das löst mein Problem, jedoch eine kleine Sache fürs bessere Verständnis, wofür stehen die Rauten?
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Die Rauten sind Begrenzer. Das allererste Zeichen (die erste Raute) definiert, wie das Abschlusszeichen aussehen soll (auch wieder eine Raute). Genausogut hätten wir ein o nehmen können. Viele nehmen auch ein / als Begrenzer. Sinn des ganzen ist, dass bei einem RegExp nicht nur das Suchmuster, sondern auch Modifikatoren angegeben werden können (in diesem Fall das U). Mit den Begrenzern zeigen wir also, bis wohin die Suche geht und ab wo die Begrenzer anfangen.

Es ist immer so aufgebaut:

[list][*]1 Zeichen Begrenzer = #
[*]0-n Zeichen Suchmuster, wobei das Begrenzer-Zeichen maskiert werden muss (d.h. es darf nicht alleinstehend im Suchmuster auftauchen, da sonst ja gedacht wird es ist das Ende des Suchmusters) = %([^%]+)%
[*]1 Zeichen Begrenzer (dasselbe wie das allererste Zeichen) = #
[*]0-n Zeichen Modifikatoren = U[/list]
0 Punkte
Beantwortet von
Alles klar, vielen Dank!
...