online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon luac. vom 19.04.2021, 16:45 Options

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 2 von son_quatsch vom 20.04.2021, 07:51 Options

Übersehen: und preg_match_all() verwenden, da preg_match() nach dem ersten Treffern aufhört.

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!

Ähnliche Themen

Excel VBA startet bestimmte mpg-datei im Media Player
jenkdat  07.11.2007 - 109 Hits - 2 Antworten

Excel Makro bestimmte Tabelle aufrufen
Ric1963  29.02.2008 - 34 Hits - 3 Antworten

Homepage Probleme
danny3  27.06.2008 - 42 Hits - 4 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026