Regex Java para soporte Unicode?

Para que coincida con la A a la Z, usaremos regex:

[A-Za-z]

¿Cómo permitir que regex coincida con los caracteres utf8 ingresados ​​por el usuario? Por ejemplo, palabras chinas como 环保 部

Lo que estás buscando son propiedades Unicode.

por ejemplo, \p{L} es cualquier tipo de letra de cualquier idioma

Entonces, una expresión regular que coincida con una palabra china podría ser algo así como

 \p{L}+ 

Existen muchas propiedades de este tipo, para obtener más detalles, visite regular-expressions.info

Otra opción es usar el modificador

Pattern.UNICODE_CHARACTER_CLASS

En Java 7 hay una nueva propiedad Pattern.UNICODE_CHARACTER_CLASS que habilita la versión Unicode de las clases de caracteres predefinidas. Vea mi respuesta aquí para más detalles y enlaces.

Podrías hacer algo como esto

 Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS); 

y \w coincidiría con todas las letras y todos los dígitos de cualquier idioma (y, por supuesto, con algunos caracteres de combinación de palabras como _ ).

Para hacer coincidir caracteres individuales, simplemente puede incluirlos en una clase de caracteres, ya sea como literales o mediante la syntax de \u03FB .

Obviamente, a menudo no puede enumerar todos los caracteres permitidos en los idiomas ideográficos. Para que la expresión regular trate los caracteres Unicode según su tipo o bloque de código, se admiten varios otros escapes que se definen aquí . Mire la sección “Soporte Unicode”, particularmente las referencias a la clase Character y al Estándar Unicode.

Para abordar el soporte de NLS y evitar la aceptación de caracteres especiales en inglés, podemos usar el siguiente patrón …

[a-zA-Z0-9 \ u0080- \ u9fff] * +

Para referencia de punto de código UTF: http://www.utf8-chartable.de/unicode-utf8-table.pl

Fragmento de código:

  String vowels = "అఆఇఈఉఊఋఌఎఏఐఒఓఔౠౡ"; String consonants = "కఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహ"; String signsAndPunctuations = "కఁకంకఃకాకికీకుకూకృకౄకెకేకైకొకోకౌక్కౕకౖ"; String symbolsAndNumerals = "౦౧౨౩౪౫౬౭౮౯"; String engChinesStr = "ABC導字會"; Pattern ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU = Pattern .compile("[a-zA-Z0-9 \\u0c00-\\u0c7f]*+"); System.out.println(ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU.matcher(vowels) .matches()); Pattern ALPHANUMERIC_AND_SPACE_PATTERN_CHINESE = Pattern .compile("[a-zA-Z0-9 \\u4e00-\\u9fff]*+"); Pattern ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN = Pattern .compile("[a-zA-Z0-9 \\u0080-\\u9fff]*+"); System.out.println(ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN.matcher(engChinesStr) .matches()); 
  • la API de expresiones regulares de Java funciona en el tipo de caracteres
  • el tipo de caracteres es implícitamente UTF-16
  • si tiene datos UTF-8 necesitará transcodificarlo a UTF-16 en la entrada si esto no se está haciendo ya

Unicode es el conjunto universal de caracteres y UTF-8 puede describirlo todo (incluidos los caracteres de control, signos de puntuación, símbolos, letras, etc.). Deberá ser más específico sobre lo que desea incluir y lo que desea excluir. Las expresiones regulares de Java usan la syntax \p{category} para hacer coincidir los puntos de código por categoría . Ver el estándar Unicode para la lista de categorías.

Si desea identificar y separar palabras en una secuencia de ideogtwigs, tendrá que buscar una API más sofisticada. Comenzaría con el tipo BreakIterator .

    Intereting Posts