Der Martin: u Modifier in einem PHP regEx Ausdruck

Beitrag lesen

Hallo,

Ich habe folgenden Testcode geschrieben:

$S_regEx_1 = '/𝒴/';
$S_regEx_2 = '/𝒴/u';

$S_string = "Haus mit einem '𝒴' an der Türe.";

$B_test_1 = preg_match($S_regEx_1, $S_string) ? TRUE : FALSE;
$B_test_2 = preg_match($S_regEx_2, $S_string) ? TRUE : FALSE;

var_dump($B_test_1);
var_dump($B_test_2);

Nachdem "𝒴" laut dieser Seite mit 4 Bytes encoded ist, würde ohne dem u Modifier der regEx nicht funktionieren. Bei meinem Beispiel bekomme ich aber in beiden Fällen ein TRUE für die Prüfung, der regEx greift also auch ohne dem u.

das liegt daran, dass PHP von Haus aus nichts über Zeichencodierungen weiß und Strings einfach ohne weitere Betrachtung als Bytefolgen behandelt. Das Zeichen 𝒴 ist in beiden RegExen identisch codiert, im zu durchsuchenden String auch. Also matcht das in beiden Fällen.

Wozu ist das also jetzt da?

Beim reinen preg_match() hat das nach meinem Verständnis keine Funktion. Das Beispiel dort bezieht sich auf preg_split, das mit dem Modifier /u keine Bytefolgen mehr aufschneidet, die gemeinsam ein UTF-8-codiertes Zeichen bilden.

Ich hab kein Problem oder Fehler ...

Schön. Das lesen wir hier selten. 😉

Einen schönen Tag noch
 Martin

--
"Hab ich vergessen" ist oft nur ein Euphemismus für "Hab ich noch nie verstanden".