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
.