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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top