preg_replace
Jürgen
- php
Hallo
ich habe ein Problem: ich soll aus einem Text ein bestimmtes Teil ersetzten.
Der Text: "abc{de 1f}ghi".
das {de 1f} soll ersetzt werden. Hab zwar schon gefunden dass das mit regulären Ausdrücken funktionieren sollte ... hab ich aber nicht hin bekommen.
Jürgen
Reguläre Ausdrücke sind eine wunderbare Lösung für reguläre Probleme, also fasse ich mal die Vermutungen darüber zusammen, was an Deinem Problem regulär ist: Du möchtest wohl alle Text-Teile, die in geschweiften Klammern stehen, ersetzen. Da Du keine Informationen darüber kundgibst, mit was ersetzt werden soll, gehe ich einfach mal davon aus, dass es entfernt (also durch nichts ersetzt) werden soll.
Die Syntax des dazu notwendigen Befehls ist einfach:
$ergebnis = preg_replace([suchmuster], [ersetzung], [eingabe]);
Die Eingabe sollte klar sein. Als Ersetzung nehmen wir gemäß der oben angestellten Vermutung einfach den leeren String "". Nun zum Suchmuster. Geschweifte Klammern sind in diesen RegExp besondere Zeichen, müssen also mit einem "" eingeleitet werden. Mit dem "." kann man beliebige Zeichen treffen und mit dem "*" beliebig viele des vorangestellten Zeichen - allerdings muss man noch ein "?" hintenanstellen, damit dieser Multiplikator nicht zu gierig wird. Das Suchmuster sieht demnach folgendermaßen aus:
"/{.*?}/"
und damit der Befehl:
$ergebnis = preg_replace("/{.*?}/", "", $eingabe);
Gruß, LX
allerdings muss man noch ein "?" hintenanstellen, damit dieser Multiplikator nicht zu gierig wird.
Per Modifikator würde sich das auch erledigen lassen, wenn es denn für den kompletten Ausdruck gelten soll.
allerdings muss man noch ein "?" hintenanstellen, damit dieser Multiplikator nicht zu gierig wird.
Per Modifikator würde sich das auch erledigen lassen, wenn es denn für den kompletten Ausdruck gelten soll.
Danke Euch allen!
Hi Suit,
Per Modifikator würde sich das auch erledigen lassen, wenn es denn für den kompletten Ausdruck gelten soll.
Per Modifikator kenne ich noch nicht, hast Du ein Beispiel?
Gruesse, Joachim
Per Modifikator kenne ich noch nicht, hast Du ein Beispiel?
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
Ich bin sicher du findest selbst schnell raus, welcher dafür sorgt, dass der Ausdruck seine Gierigkeit (greediness) umkehrt ;)
Hi,
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
na sowas, kannte ich nicht, aber ich habs gaaaanz schnell gefunden ;-)
also, der Vollständigkeit halber:
$txt = "abc{de 1f}ghi {foo bar}";
$txt = preg_replace("#{.+}#U", " xxxx ", $txt);
echo $txt;
Gruesse, Joachim
Per Modifikator würde sich das auch erledigen lassen, wenn es denn für den kompletten Ausdruck gelten soll.
Das ist korrekt, aber da es nur ein einzelner Multiplikator ist, ist diese Schreibweise kürzer und auch einfacher zu lesen.
Gruß, LX
Hi,
das {de 1f} soll ersetzt werden. Hab zwar schon gefunden dass das mit regulären Ausdrücken funktionieren sollte ... hab ich aber nicht hin bekommen.
Aber was genau Du versucht hast magst Du nicht mitteilen?
Dann denke ich, ein kleiner Blick z.B in diese Doku schadet nicht (bei den Suchmustern spielt rs keine Rolle, dass es in der Perl-Referenz steht)
Ansonsten hilft Dir möglicherweise das weiter:
$txt = "abc{de 1f}ghi {foo bar}";
$txt = preg_replace("#{(.+?)}#", " xxxx ", $txt);
echo $txt;
Gruesse, Joachim