validator validate test regular online one golang java regex unicode cjk

java - validate - regex perl online



Regex Java para soporte Unicode? (4)

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 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 环保 部


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());


Para hacer coincidir caracteres individuales, simplemente puede incluirlos en una clase de caracteres, ya sea como literales o mediante la sintaxis 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 here . Mire la sección "Soporte Unicode", particularmente las referencias a la clase Character y al Estándar Unicode.


  • 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 sintaxis /p{category} para hacer coincidir los puntos de código por category . Ver el estándar Unicode para la list de categorías.

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