Christian Seiler: preg_match zu gefrässig

Beitrag lesen

Hallo Matthias,

$output = preg_replace ("/<ERRORMESSAGE>(.*?)</ERRORMESSAGE>/", "", $output);
aber das funktioniert ebenso wenig. Davon abgesehen, mit (.*?) bekommt man leider nicht den und den Carriage Return (\r) => das garnichts gematched wird.

Hmmm, klar..... der m-Modifier fehlt:

$output = preg_replace ("/<ERRORMESSAGE>(.*?)</ERRORMESSAGE>/m", "", $output);

Sonst geht das nicht über mehrere Zeilen. Hatte ich vergessen.

"/(<ERRORMESSAGE([\w,\W]*)</ERRORMESSAGE>)?/"
"/(<ERRORMESSAGE([\w,\W]*)</ERRORMESSAGE>){1}/"

Du hast das falsch verstanden; richtig wäre:

"/<ERRORMESSAGE([\w,\W]*?)</ERRORMESSAGE>/"

Das ?-Zeichen hat zwei Bedeutungen: Direkt nach einem Zeichen oder Klammer-Ausdruck meint es, dass dieses Zeichen oder dieser Klammer-Ausdruck keinmal oder einmal vorkommen dürfen. Wenn es jedoch hinter einem * oder + steht, dann modifiziert es * oder +, damit diese nicht gierig sind.

Viele Grüße,
Christian

--
Glaube niemals dem Gelabber der Forums-Antworten. Das sind doch Minderheiten-Diskriminierer, Sexisten, Psychisch Kranke und Depressive.
Ja auch Rassisten und ähnliche Sozialrowdies befinden sich da drunter. - </archiv/2003/8/54855/#m305505>