u Modifier in einem PHP regEx Ausdruck
bearbeitet von
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)](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT@mXF/dGiZkBBMqBYpxqZSkFpfEF5cUZealAyWUPsydtEUJLg7SrpGUn5@jWQDUHJ@bWJKcoQEzWkcBWbOmNVSPER49Rhh6uMoSi@JTSnMLNKA2wlQYaVr//w8A)
~~~
$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`](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT@mOCZJX90aJmiEECwFinKplKQWl8QXlxRl5qUDpZQ@zJ20ReHwNoXD85XgsiCDCoDa44sLcjJLNGDG6ygga9a0hqo2wqraCEM1V1liUXxKaW6BBtQWmAojTev//wE).
Es fängt aber schon beim [Punkt `.`](https://www.regular-expressions.info/dot.html) an, welcher [mit u multibyte Zeichen](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21QsFWQV1fT79U3RooUpJaXBJfXFKUmZcOFFf6MHfSFiWgeAFQZXxuYklyRnxiTo4GRKOOArJyIC@/tETTmqsssSg@pTS3QAPC//8fAA) matcht, [sonst würden die zerteilt](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21QsFWQV1fT1/dGihQklpcEl9cUpSZlw4UVvowd9IWJaB4AVBhfG5iSXJGfGJOjgZEn44CsnIgL7@0RNOaqyyxKD6lNLdAA8L//x8A). Natürlich lassen sich auch begrenzende [Quantifier](https://www.regular-expressions.info/repeat.html) nur dann sinnvoll einsetzen ([Beispiel](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT9Or9q4VkVf3RombIQsXAoU51IpSS0uiS8uKcrMSwdKKjkdXlKkBBcHGaORlJ@fo1kANCA@N7EkOUMDZoWOArJmTWuoHiM8eoww9HCVJRbFp5TmFmhAbYSpMNK0/v8fAA)).
Da in der Diskussion auf die `mb_` Funktionen verwiesen wurde. Ich selbst würde nie auf den Funktionsumfang von PCRE(2) verzichten wollen.
u Modifier in einem PHP regEx Ausdruck
bearbeitet von
Die Sache ist eigentlich ganz einfach. Wenn du mit UTF-8 arbeitest, ist der `u`-modifier (PCRE_UTF8) nötig, 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)](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT@mXF/dGiZkBBMqBYpxqZSkFpfEF5cUZealAyWUPsydtEUJLg7SrpGUn5@jWQDUHJ@bWJKcoQEzWkcBWbOmNVSPER49Rhh6uMoSi@JTSnMLNKA2wlQYaVr//w8A)
~~~
$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`](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT@mOCZJX90aJmiEECwFinKplKQWl8QXlxRl5qUDpZQ@zJ20ReHwNoXD85XgsiCDCoDa44sLcjJLNGDG6ygga9a0hqo2wqraCEM1V1liUXxKaW6BBtQWmAojTev//wE).
Es fängt aber schon beim [Punkt `.`](https://www.regular-expressions.info/dot.html) an, welcher [mit u multibyte Zeichen](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21QsFWQV1fT79U3RooUpJaXBJfXFKUmZcOFFf6MHfSFiWgeAFQZXxuYklyRnxiTo4GRKOOArJyIC@/tETTmqsssSg@pTS3QAPC//8fAA) matcht, [sonst würden die zerteilt](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21QsFWQV1fT1/dGihQklpcEl9cUpSZlw4UVvowd9IWJaB4AVBhfG5iSXJGfGJOjgZEn44CsnIgL7@0RNOaqyyxKD6lNLdAA8L//x8A). Natürlich lassen sich auch begrenzende [Quantifier](https://www.regular-expressions.info/repeat.html) nur dann sinnvoll einsetzen ([Beispiel](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT9Or9q4VkVf3RombIQsXAoU51IpSS0uiS8uKcrMSwdKKjkdXlKkBBcHGaORlJ@fo1kANCA@N7EkOUMDZoWOArJmTWuoHiM8eoww9HCVJRbFp5TmFmhAbYSpMNK0/v8fAA)).
Da in der Diskussion auf die `mb_` Funktionen verwiesen wurde. Ich selbst würde nie auf den Funktionsumfang von PCRE(2) verzichten wollen.
u Modifier in einem PHP regEx Ausdruck
bearbeitet von
Die Sache ist eigentlich ganz einfach. Wenn du mit UTF-8 arbeitest, ist der `u`-modifier (PCRE_UTF8) nötig, da z.B. hier auch unicode support für vordefinierte Zeichenklassen wie `\w` *word characters* oder Metazeichen wie `\b` *word boundary* (anchor) aktiviert wird. Es fängt aber schon beim [Punkt `.`](https://www.regular-expressions.info/dot.html) an, welcher [mit u multibyte Zeichen](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21QsFWQV1fT79U3RooUpJaXBJfXFKUmZcOFFf6MHfSFiWgeAFQZXxuYklyRnxiTo4GRKOOArJyIC@/tETTmqsssSg@pTS3QAPC//8fAA) matcht, [sonst würden die zerteilt](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21QsFWQV1fT1/dGihQklpcEl9cUpSZlw4UVvowd9IWJaB4AVBhfG5iSXJGfGJOjgZEn44CsnIgL7@0RNOaqyyxKD6lNLdAA8L//x8A).
Siehe z.B. [dieses Demo (tio.run)](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT@mXF/dGiZkBBMqBYpxqZSkFpfEF5cUZealAyWUPsydtEUJLg7SrpGUn5@jWQDUHJ@bWJKcoQEzWkcBWbOmNVSPER49Rhh6uMoSi@JTSnMLNKA2wlQYaVr//w8A)
~~~
$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`](https://tio.run/##K8go@P/fxj7AI4CLS6UoNT21It5QwVZBXT@mOCZJX90aJmiEECwFinKplKQWl8QXlxRl5qUDpZQ@zJ20ReHwNoXD85XgsiCDCoDa44sLcjJLNGDG6ygga9a0hqo2wqraCEM1V1liUXxKaW6BBtQWmAojTev//wE).
Da in der Diskussion auf die `mb_` Funktionen verwiesen wurde. Ich selbst würde nie auf den Funktionsumfang von PCRE(2) verzichten wollen.