2009-10-15 23 views
8

No puedo resolver mi problema con regexp.regexp con lang ruso

Ok, cuando el tipo i:

$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#","$name_start $1 $name_end",$string); 

todo está bien, excepto situación de la lengua rusa.

así, 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é alguna idea, acaba de escribir:

$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string); 

pero esto está loco: D

por favor, dame la variante simple

+0

... uno de las razones por las que estoy contento de no ser ruso :-P – brianreavis

Respuesta

17

probar gran variedad 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 es "comido" por el PLUS. Esto haría lo mismo:

"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)]#u" 
+1

gracias! cuando agrego 'u' se resuelven todos los problemas – vorobey

+0

¡Thaks para este código! –

+0

¡es malo, porque es ilegible! El código debe ser simple y legible :) – bmalets

5

El script Unicode común (apoyado desde pcre 3.3) proporciona una prueba para la propiedad cirílico.

p. Ej. reemplazar todos los caracteres que no son ni ni dígitos cirílico (latín):

$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 los caracteres Unicode".
Y tiene que especificar la bandera PCRE8 (u) como se describe en http://docs.php.net/reference.pcre.pattern.modifiers

+0

Sí, buenos puntos y referencias! –

+0

Afaik no hay diferencias (técnicas) entre los scripts "comunes" y especifica los rangos "manualmente". Entonces es solo una cuestión de elección. Excepto tal vez que los nombres de las propiedades son un poco más documentados por sí mismos. – VolkerK

0

Ésta funcionó para mí:

/^[а-яА-Я\p{Cyrillic}0-9\s\-]+$/ 

he probado en todos los navegadores, incluyendo Safari

Cuestiones relacionadas