wert zwischen zwei bestimmten zeichen in eine variable speichern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausdruck
ausdrcken
ausfhrliche erklrung
ausnehmen
begrenzer
beispiel
eingabe
expert
fragezeichen
gedacht
geheimnis
klammern
linker begrenzer
muster
schn ansehen
sonderfunktion
sonderzeichen
super vielen dank
tutorial
variable
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Oh, Google findet dazu eine Menge Infos, allerdings muss man dazu wissen, wonach man sucht: PCRE, "Reguläre Ausdrücke", "Regex", usw.
$eingabe = '|a/tachen?/a|';
$rx = '/\|a\/(.*?)\/a\|/';
if( !preg_match($rx, $eingabe, $rx_matches) ) die('Nix gefunden ...');
$eine_variable = $rx_matches[1];
http://regexp-evaluator.de/tutorial/
http://www.php.net/manual/de/function.preg-match.php
-
Super!
Vielen Dank klappt wunderbar^^
Jetzt bin ich ein wenig neugierig xD
$rx = '/\|a\/(.*?)\/a\|/';
Mich würde interessieren was die einzelnen Zeichen bedeuten(dick markiert). -
Hab ich mir fast gedacht ...
Das ist immer das wirklich Schwierige an den RegEx-Teilen ...
Das Erklären ...
Erstmal gibts da einige Sonderzeichen, wenn man diese in einem RegEx einfach darstellen will, ohne dass sie eine Sonderfunktion haben, muss man denen einen Backslash voranstellen. In dem Fall hier sind das "/" und "|".
Die "/" am Anfang und am Ende sind die so genannten RegEx-Begrenzer. Die bräuchte man in PHP eigentlich nicht, aber da wir hier mit Perl-kompatiblen Regulären Ausdrücken (PCRE) hantieren, müssen die eben sein (in Perl werden sie benötigt).
$rx = '/\|a\/(.*?)\/a\|/';
Das Geheimnis steht zwischen den runden Klammern (und die selbst gehören auch dazu):
".": ein beliebiges Zeichen (mit einigen Ausnahmen, die hier nicht so wichtig sind.
"*": das vorangegangene Zeichen (oder eine Zeichenklasse) beliebig oft. Oder mathematisch ausgedrückt: 0-mal, 1-mal, ..., x-mal.
"?": das Fragezeichen hat mehrere Bedeutungen. Hier heißt es: Nimm den kürzesten Teilstring, der auf das vorher angegebene Such-Muster (".*") passt. Die PCRE-Experten sagen dazu: Der Suchausdruck ist nicht gierig ("nongreedy").
Der Rest davor und dahinter sind lediglich deine Begrenzungszeichenketten mit den passenden Backslashes versehen. Wenn du dir nicht sicher bist, ob du alle Sonderzeichen maskiert hast, kannst du auch preg_quote() dafür verwenden:
$rx = preg_quote('|a/', '/') . // linker Begrenzer
'(.*?)' . // der String, den wir suchen
preg_quote('/a|', '/'); // rechter Begrenzer
Bliebe noch das mit dem $rx_matches. Dort speichert preg_match() ein Array, dass die gefundenen Teilzeichenketten enthält. Geklammerte Ausdrücke findet man an Hand der Klammer-Nummer. Hier wäre das die Eins, weil der Ausdruck innerhalb der ersten runden Klammer steht.
Das kannst du dir mit print_r($rx_matches) schön ansehen. -
Danke für diese Ausführliche Erklärung^^
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage