Comment puis-je faire correspondre les caractères (avec l'intention de les supprimer) de l'extérieur du plan multilingue de base unicode dans java?Java regex correspondre des caractères en dehors du plan multilingue de base
15
A
Répondre
19
Pour supprimer tous les caractères non-BMP, ce qui suit devrait fonctionner:
String sanitizedString = inputString.replaceAll("[^\u0000-\uFFFF]", "");
3
Vous recherchez des caractères spécifiques ou tous les caractères en dehors du BMP?
Si l'ancien, vous pouvez utiliser un StringBuilder
pour construire une chaîne contenant les points de code des plans supérieurs, et regex fonctionnera comme prévu:
String test = new StringBuilder().append("test").appendCodePoint(0x10300).append("test").toString();
Pattern regex = Pattern.compile(new StringBuilder().appendCodePoint(0x10300).toString());
Matcher matcher = regex.matcher(test);
matcher.find();
System.out.println(matcher.start());
Si vous cherchez à supprimer tous non caractères -bmp d'une chaîne, puis j'utiliser StringBuilder
directement plutôt que regex:
StringBuilder sb = new StringBuilder(test.length());
for (int ii = 0 ; ii < test.length() ;)
{
int codePoint = test.codePointAt(ii);
if (codePoint > 0xFFFF)
{
ii += Character.charCount(codePoint);
}
else
{
sb.appendCodePoint(codePoint);
ii++;
}
}
Questions connexes
- 1. Plan multilingue supplémentaire Unicode en Java
- 2. Comment faire correspondre les caractères japonais en utilisant IDN regex?
- 3. strings.xml caractères spéciaux en multilingue
- 4. traduire des caractères génériques de nom de fichier en regex
- 5. Java - comment faire correspondre regex Modèle contenant des guillemets simples?
- 6. Remplacer en utilisant RegEx en dehors des marqueurs de texte
- 7. Lecture de caractères en dehors de l'ASCII
- 8. Clavier virtuel multilingue en Java
- 9. (grep) Regex pour faire correspondre les caractères non-ASCII?
- 10. javascript regex pour faire correspondre les caractères entre deux chaînes
- 11. comment faire correspondre "non" avec plus de caractères dans le modèle java regex?
- 12. Regex - Faire correspondre le texte entre 2 caractères
- 13. Quelle regex peut correspondre à des séquences du même caractère?
- 14. Comment faire correspondre et remplacer un caractère non-mot entre des caractères de mot avec RegEx?
- 15. Ne faire correspondre qu'un mot en dehors d'une instruction HTML avec une regex
- 16. caractères regex en vietnamien
- 17. Regex pour correspondre à des attributs html
- 18. répéter plusieurs caractères RegEx
- 19. Garniture des caractères en Java
- 20. Un Regex pour correspondre à un SHA1
- 21. Comment supprimer des mots d'un texte multilingue?
- 22. PHP: Escape Quotes SEULEMENT en dehors des balises HTML (Regex)
- 23. Java regex, ont besoin d'aide avec des caractères d'échappement
- 24. Regex pour correspondre 010101
- 25. Regex pour correspondre name1.name2 [.name3]
- 26. Base de données ou structure appropriée pour faire correspondre des chaînes à des modèles regex
- 27. Regex pour faire correspondre quatre lettres répétées dans une chaîne en utilisant un modèle Java
- 28. Regex: ignorer des caractères supplémentaires
- 29. Regex avec des caractères inhabituels
- 30. Comment écrire une regex pour correspondre à des caractères arabes, anglais, numériques et d'espacement?
Avez-vous déjà testé cela? Parce que votre gamme de caractères inclut la plage de substitution utilisée pour construire des points de code non-BMP. – Anon
@Anon: Comme vous l'avez souligné dans votre propre réponse, les expressions rationnelles sont évaluées au niveau des points de code, pas des codounits, donc ils ne voient pas de substituts. – axtavt
Oui, cela a été testé avec des caractères non-BMP. –