regex con la lengua rusa
Pregunta
No puedo solucionar mi problema con expresiones regulares.
Ok, cuando i tipo:
$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#","$name_start $1 $name_end",$string);
todo está bien, excepto situación con el idioma ruso.
Por lo tanto, trato de volver a escribir esta reg-exp:
$string = preg_replace("#\[name=([a-zA-Z0-9**а-яА-Я** .-]+)*]#","$name_start $1 $name_end",$string);
pero esto no funciona,
Sé que alguna idea, acaba de escribir:
$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string);
pero esto es una locura: D
Por favor, dame simple variante
Solución
Pruebe con un rango de Unicode:
'/[\x{0410}-\x{042F}]/u' // matches a capital cyrillic letter in the range A to Ya
No se olvide de la bandera / u para Unicode.
En su caso:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)*]#u"
Tenga en cuenta que la estrella en su expresión regular es redundante. Todo ya se "come" por el PLUS. Esto haría lo mismo:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)]#u"
Otros consejos
El script Unicode común (apoyado desde pcre 3.3) proporciona una prueba para la propiedad cirílico .
por ejemplo. reemplazar todos los caracteres que no son ni cirílico ni (latino) dígitos:
$string = '1a2b3cйdцeуfкбxюy';
echo preg_replace('/[^0-9\p{Cyrillic}]/u', '*', $string);
Puede encontrar la documentación para esa función bajo http://www.pcre.org/pcre.txt "propiedades de caracteres Unicode".
Y hay que especificar el indicador PCRE8 (u) como se describe en http: //docs.php .NET / reference.pcre.pattern.modifiers
Éste trabajó para mí:
/^[а-яА-Я\p{Cyrillic}0-9\s\-]+$/
He probado en todos los navegadores, incluyendo Safari