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