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.