Probleme mit Regex (bestimmte Sachen filtern)
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
Antwort schreiben
Antwort 1 von son_quatsch vom 20.04.2021, 07:49 Options
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' );
Antwort 3 von luac. vom 22.04.2021, 00:42 Options
Hallo,
vielen Dank, das löst mein Problem, jedoch eine kleine Sache fürs bessere Verständnis, wofür stehen die Rauten?
Antwort 4 von son_quatsch vom 22.04.2021, 07:48 Options
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:
- 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
Antwort 5 von luac. vom 22.04.2021, 11:46 Options
Alles klar, vielen Dank!