Jonny 5: u Modifier in einem PHP regEx Ausdruck

Beitrag lesen

Die Sache ist eigentlich ganz einfach. Wenn du mit UTF-8 arbeitest, den u-modifier (PCRE_UTF8) grundsätzlich aktivieren. Da z.B. hier auch unicode support für vordefinierte Zeichenklassen wie \w word characters oder Metazeichen wie \b word boundary (anchor) aktiviert wird.

Siehe z.B. dieses Demo (tio.run)


$regex_1 = '/\w/';
$regex_2 = '/\w/u';

// utf8 enkodiert
$test_string = "𝒴";

$test_1 = (bool)preg_match($regex_1, $test_string);
$test_2 = (bool)preg_match($regex_2, $test_string);

var_dump($test_1, $test_2);

bool(false) bool(true)

Oder diese Variante mit preg_split und \b.

Es fängt aber schon beim Punkt . an, welcher mit u multibyte Zeichen matcht, sonst würden die zerteilt. Natürlich lassen sich auch Quantifier nur im richtigen Modus sinnvoll einsetzen (Beispiel).

Im UTF-8 Modus wird übrigens erwartet, dass auch das Suchmuster in UTF-8 kodiert ist.

Da in der Diskussion auf die mb_ Funktionen verwiesen wurde. Ich selbst würde nie auf den Funktionsumfang von PCRE(2) verzichten wollen.