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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top