PHP mb_ereg_replace ersetzt den $string nicht?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Moin zusammen,

ich bin derzeit dabei mir einen regex zu basteln, der multi-byte unterstützt. Aber wieso ersetzt mein mb_ereg_replace nichts?

Beispiel:
Code:
$myTitle = "Wie geht es dir?";

$string = mb_ereg_replace('/\bWie geht es dir?\b/i', 'Hat geklappt', $myTitle);

echo $string;

Ausgabe ist: Wie geht es dir? -> Müsste aber Hat geklappt sein... Wo ist der Fehler?

MfG und Danke!
 
Mach mal bitte die Separatoren '/' und '/' weg.
 
Das "?" muss escaped werden: "\?"

"\b" funktioniert nicht bei bei einem "?"
 
Beim i davor auch? - In preg_replace() klappt das so mit /\bTEXT\b/i... - Darum wundere ich mich
Ergänzung ()

Weder mit der einen ("/"), noch mit der anderen ("?") Lösung klappt es...

Mit "preg_replace" klappt das. Wieso nicht mit mb_ereg_replace?
 
Zuletzt bearbeitet:
Was passiert wenn du denn einfach "/Wie geht es dir\?/i" nutzt?

Ich empfehle dir https://regex101.com/ um die Ausdrücke zu testen.
 
Okay, jetzt geht es teilweise. Habe das hier gefunden.

Code:
Code:
$myTitle = 'wie geht es dir';

$string = mb_ereg_replace('[\bWie geht es dir\b/i]', 'Hat geklappt', $myTitle);

echo $string;

Nur ist mein Output nun:
wHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklapptHat geklappt

Wieso das???

EDIT: Der Output müsste so oft sein wie "wie geht es dir" Buchstaben hat. Wie kann ich sagen, ersetze das ganze Wort?
 
Zuletzt bearbeitet:
Ich kann zwar kein PHP, aber das dürfte auch dort kein valider Ausdruck sein.

"[Wie geht es dir]" matcht auf "W" oder "i" oder "e" oder " " oder "g" und so weiter.. und ersetzt damit jedes Zeichen in $myTitle mit "Hat geklappt".

"/i" sollte in diesem Falle ein Syntaxfehler sein.
 
Zuletzt bearbeitet:
Ja, weil du mit [] ein "oder" baust in dem alle Zeichen von $myTitle enthalten sind, es also auf jedes Zeichen matcht. Es funktioniert also / macht das, was der Ausdruck soll.
 
Der Ausdruck von mir "/\bTEXT/b\i" ist schon richtig... Nur nimmt mb_ereg_replace() wohl kein /. Da ist nur die Frage, wie kann ich das nun trotzdem case insensitive machen?
 
Schau dir doch mal den letzten (optionalen) Parameter an.
 
FrazeColder schrieb:
Was willst du mir damit sagen?

Ich vermute: lesen, lesen und nochmals lesen. Das kann nie schaden.

Code:
$string = mb_ereg_replace('\bWie Geht es dir\?', 'Hat geklappt', $myTitle, 'i');
 
Zurück
Oben