solo regulares regular que permitir letras expresiones expresion espacios espacio cualquier caracter blanco acepte aceptar ruby regex unicode internationalization

ruby - regulares - ¿Cómo se especifica un rango de caracteres regex que funcionará en idiomas europeos distintos del inglés?



expresiones regulares (2)

Estoy trabajando con el motor de expresiones regulares de Ruby. Necesito escribir una expresión regular que haga esto

WIKI_WORD = //b([a-z][/w_]+/.)?[A-Z][a-z]+[A-Z]/w*/b/

pero también funcionará en otros idiomas europeos además del inglés. No creo que el rango de caracteres [az] cubra letras minúsculas en alemán, etc.


James Gray escribió una serie de artículos sobre cómo trabajar con Unicode, UTF-8 y Ruby 1.8.7 y 1.9.2. Son lectura importante.

Con Ruby 1.8.7, podríamos agregar:

#!/usr/bin/ruby -kU require ''jcode''

y obtener soporte parcial UTF-8.

Con 1.9.2 puedes usar:

# encoding: UTF-8

como la segunda línea de su archivo de origen y que le dirá a Ruby por defecto a UTF-8. La recomendación de Gray es que hagamos eso con todas las fuentes que escribimos a partir de ahora.

Eso no afectará la codificación externa al leer / escribir texto, solo la codificación del código fuente.

Ruby 1.9.2 no amplía las clases de caracteres /w , /W y /s usuales para manejar UTF-8 o Unicode. Como dicen los otros comentarios y respuestas, solo los conjuntos de caracteres POSIX y Unicode en expresiones regulares lo hacen.


WIKI_WORD = //b(/p{Ll}/w+/.)?/p{Lu}/p{Ll}+/p{Lu}/w*/b/u

debería funcionar en Ruby 1.9. /p{Lu} y /p{Ll} son shorthands para letras Unicode mayúsculas y minúsculas. ( /w ya incluye el guion bajo)

Consulte también esta respuesta : es posible que deba ejecutar Ruby en modo UTF-8 para que esto funcione, y posiblemente su script también se codifique en UTF-8.