regex avec la langue russe
Question
Je ne peux pas résoudre mon problème avec regexp.
Ok, quand je tape:
$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#","$name_start $1 $name_end",$string);
tout est ok, sauf situation langue russe.
, j'essaie de retaper ce reg-exp:
$string = preg_replace("#\[name=([a-zA-Z0-9**а-яА-Я** .-]+)*]#","$name_start $1 $name_end",$string);
mais cela ne fonctionne pas,
Je sais une idée, il suffit d'écrire:
$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string);
mais c'est fou: D
S'il vous plaît, donnez-moi simple variante
La solution
Essayez une gamme Unicode:
'/[\x{0410}-\x{042F}]/u' // matches a capital cyrillic letter in the range A to Ya
Ne pas oublier le drapeau / u pour Unicode.
Dans votre cas:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)*]#u"
Notez que la STAR dans votre regex est redondant. Tout est déjà « mangé » par le PLUS. Cela ferait la même chose:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)]#u"
Autres conseils
Le script unicode commun (pris en charge depuis PCRE 3.3) fournit un test pour la propriété cyrillique .
par exemple. remplacer tous les caractères qui ne sont ni cyrillique, ni (latin) chiffres:
$string = '1a2b3cйdцeуfкбxюy';
echo preg_replace('/[^0-9\p{Cyrillic}]/u', '*', $string);
Vous trouverez la documentation pour cette fonctionnalité sous http://www.pcre.org/pcre.txt "propriétés de caractère Unicode".
Et vous devez spécifier le drapeau PCRE8 (u) tel que décrit à la http: //docs.php .net / reference.pcre.pattern.modifiers
Celui-ci a fonctionné pour moi:
/^[а-яА-Я\p{Cyrillic}0-9\s\-]+$/
Je l'ai testé dans tous les navigateurs, y compris Safari