Pour faire correspondre A à Z, nous allons utiliser regex:
[A-Za-z]
Comment autoriser regex à correspondre aux caractères utf8 entrés par l'utilisateur? Par exemple, des mots chinois comme
Ce que vous recherchez, ce sont des propriétés Unicode.
par exemple. \p{L}
est toute sorte de lettre de n'importe quelle langue
Donc, une expression rationnelle pour correspondre à un mot chinois pourrait être quelque chose comme
\p{L}+
Il y a beaucoup de telles propriétés, pour plus de détails voir regular-expressions.info
Une autre option consiste à utiliser le modificateur
Pattern.UNICODE_CHARACTER_CLASS
Dans Java 7, il y a une nouvelle propriété Pattern.UNICODE_CHARACTER_CLASS
qui active la version Unicode des classes de caractères prédéfinies voir ma réponse ici pour plus de détails et de liens
Tu pourrais faire quelque chose comme ça
Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);
et \w
correspondrait à toutes les lettres et tous les chiffres de toutes les langues (et bien sûr, certains mots combinant des caractères tels que _
).
Pour résoudre le problème du support NLS et éviter d'accepter les caractères spéciaux anglais, nous pouvons utiliser le modèle ci-dessous ...
[a-zA-Z0-9\u0080-\u9fff] * +
Pour la référence du point de code UTF: http://www.utf8-chartable.de/unicode-utf8-table.pl
Extrait de code:
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());
Pour faire correspondre des caractères individuels, vous pouvez simplement les inclure dans une classe de caractères, en tant que littéraux ou via le \u03FB
syntaxe.
Évidemment, vous ne pouvez souvent pas énumérer tous les caractères autorisés dans les langues idéographiques. Pour que l'expression rationnelle traite les caractères unicode en fonction de leur type ou de leur bloc de code, plusieurs autres échappements définis sont définis ici . Regardez la section "Support Unicode", en particulier les références à la classe Character
et à la norme Unicode elle-même.
char
char
est implicitement UTF-16Unicode est le jeu universel de caractères et UTF-8 peut tout décrire (y compris les caractères de contrôle, la ponctuation, les symboles, les lettres, etc.). Vous devrez être plus précis sur ce que vous souhaitez inclure et ce que vous souhaitez exclure. Java) Les expressions rationnelles utilisent le \p{category}
syntaxe pour faire correspondre les points de code par catégorie . Voir le norme Unicode pour la liste des catégories.
Si vous souhaitez identifier et séparer des mots dans une séquence d'idéographes, vous devez utiliser une API plus sophistiquée. Je commencerais par le type BreakIterator
.