preg_replace mit & und &
ulli
- php
hallo
hat jmd ne möglichst elegante idee, wie ich/man alle & aus einem string (die nicht aus dem teilstring & sind) in solche (&) umwandeln kann?
ich dachte da an preg_replace.
$string = "m.php?nm=STL&fi=f_l&all=1&su=1";
$tmp = preg_replace("/(&[^amp;])/","&",$string);
produziert mir:
m.php?nm=STL&i=f_l&all=1&u=1
was ist an /(&[^amp;])/ falsch?
cu
ulli
Hi Ulli,
preg_replace ist sicherlich die richtige Methode.
preg_replace("/(&[^amp;])/","&",$string);
bedeutet:
ersetze alle & mit & - allerdings nur jene & die nicht von amp gefolgt werden.
hat jmd ne möglichst elegante idee, wie ich/man alle & aus einem string (die nicht aus dem teilstring & sind) in solche (&) umwandeln kann?
Die Frage ist etwas verwirrend. Welches Zeichen möchtest Du denn mit welchen ersetzen?
Eva
hallo
preg_replace("/(&[^amp;])/","&",$string);
bedeutet:
ersetze alle & mit & - allerdings nur jene & die nicht von amp gefolgt werden.
ja eben nicht =( ...
in dem von mir angegebene beispiel wird
m.php?nm=STL&fi=f_l&all=1&su=1
zu:
m.php?nm=STL&i=f_l&all=1&u=1
übersetzt
Die Frage ist etwas verwirrend. Welches Zeichen möchtest Du denn mit welchen ersetzen?
alle & in & aber nur, wenn nicht schon ein & da steht
cu
ulli
Sorry, kleine Korrektur:
preg_replace ist sicherlich die richtige Methode.
preg_replace("/(&[^amp;])/","&",$string);
bedeutet:
Ersetze alle & plus das folgende Zeichen (genau eines) mit & - allerdings nur jene & plus folgendes Zeichen, die nicht &a &m &p oder &; sind.
Denn die Klammern [] umschließen immer eine Zeichenmenge in regulären Ausdrücken.
hallo
Sorry, kleine Korrektur:
Ersetze alle & plus das folgende Zeichen (genau eines) mit & - allerdings nur jene & plus folgendes Zeichen, die nicht &a &m &p oder &; sind.
ok ... und wie sag ich ihm dann : ersetze alle & die nicht von amp; gefolgt werden? =)
cu
ulli
ok ... und wie sag ich ihm dann : ersetze alle & die nicht von amp; gefolgt werden? =)
versuch es mal mit
/&^(amp;)/
runde Klammern gruppieren Zeichen.
Das O'Reilley Buch "Programmieren mit Perl" hat übrigens eine schöne Übersicht für reguläre Ausdrücke. Vielleicht findest Du ja jemanden, der das Buch hat (und wenns nur die Bibliothek ist).
Leider hab ich das Buch grad nicht da, sonst wäre ich mir mit der Antwort auf Deine Frage sicherer.
Im Selfhtml gibt es auch ein Kapitel über reguläre Ausdrücke. Vielleicht kann Dir das weiter helfen, wenn mein obiger Tip doch nicht richtig ist.
Eva
Hi,
versuch es mal mit
ein gutes Beispiel dafür, dass blindes Herumprobieren extrem nutzfrei ist.
runde Klammern gruppieren Zeichen.
Das "^" steht außerhalb von Zeichenklassen trotzdem für den String- bzw. Zeilenanfang.
Cheatah
ich habs ...
assertions sind die lösung
http://de.php.net/manual/de/pcre.pattern.syntax.php
(hab vergessen, wie man hier links macht)
würde in meinem fall
$tmp = preg_replace("/&(?!amp;)/","&",$string);
ergeben
ulli