confine di parola su caratteri non latini in php
-
02-10-2019 - |
Domanda
In questo esempio funziona bene:
echo preg_replace("/\bI\b/u", 'we', "I can"); // we can
Questo erano lettere russe vengono utilizzati non funziona, anche se io uso "u" modificatore:
echo preg_replace("/\bЯ\b/u", 'мы', 'Я могу'); // still "Я могу"
Quindi la domanda è che cosa devo fare per risolvere questo problema?
Grazie.
Soluzione
In PCRE (la libreria utilizzata da preg_replace
), \b
si riferisce solo ai confini di parola in senso ASCII, vale a dire, solo [a-zA-Z0-9_]
sono caratteri di parola.
Se si desidera far corrispondere un personaggio che non ha Я
lettere, cifre o _
immediatamente prima o dopo, si può usare:
(?<![\p{L}0-9_])Я(?![\p{L}0-9_])
Si devono ancora utilizzare il modificatore u
.
Altri suggerimenti
confini
?? spesso intuitivo .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow