\p{InCombiningDiacriticalMarks}
est une Unicode propriété de bloc. Dans JDK7, vous serez en mesure d'écrire à l'aide de deux parties, la notation \p{Block=CombiningDiacriticalMarks}
, qui peut être plus clair pour le lecteur. Il est documenté ici dans UAX#44: "La Base de données des Caractères Unicode".
Ce que cela signifie, c'est que le point de code est comprise dans une gamme donnée, d'un bloc, qui a été allouée à utiliser pour les choses de ce nom. C'est une mauvaise approche, car il n'y a aucune garantie que le point de code dans cette gamme est ou n'est pas quelque chose de particulier, ni que les points de code en dehors de ce bloc ne sont pas essentiellement le même caractère.
Par exemple, il y a des lettres latines dans l' \p{Latin_1_Supplement}
bloc, comme é, U+00E9. Cependant, il y a des choses qui ne sont pas des lettres latines, là aussi. Et bien sûr, il y a aussi des lettres latines de tous sur la place.
Les blocs sont presque jamais ce que vous voulez.
Dans ce cas, je pense que vous souhaiterez peut-être utiliser la propriété \p{Mn}
, une.k.un. \p{Nonspacing_Mark}
. Tous les points de code dans le Combining_Diacriticals bloc sont de cette sorte. Il y a également (comme de l'Unicode 6.0.0) 1087 Nonspacing_Marks qui sont pas dans le bloc.
C'est presque la même que la vérification des \p{Bidi_Class=Nonspacing_Mark}
, mais pas tout à fait, parce que ce groupe comprend également l'affichage de marques, \p{Me}
. Si vous souhaitez à la fois, vous pouvez dire [\p{Mn}\p{Me}]
si vous utilisez un défaut de Java moteur d'expressions régulières, puisqu'il ne donne accès à la General_Category de la propriété.
Vous auriez à utiliser JNI pour obtenir à l'USI C++ bibliothèque regex la façon de Google afin d'accéder à quelque chose comme \p{BC=NSM}
, parce que pour l'instant seuls les soins intensifs et Perl donner accès à toutes les propriétés Unicode. La Java normal bibliothèque regex prend en charge uniquement un couple de la norme Unicode propriétés. Dans JDK7 bien qu'il va être en charge de l'Unicode Script propery, qui est à peu près infiniment préférable à la propriété de Bloc. Ainsi, vous pouvez en JDK7 écrire \p{Script=Latin}
ou \p{SC=Latin}
, ou de courtes coupe- \p{Latin}
, pour obtenir à n'importe quel caractère de l'écriture latine. Cela conduit à la très souvent nécessaires [\p{Latin}\p{Common}\p{Inherited}]
.
Être conscient que ce ne sera pas supprimer ce que vous pourriez penser que "l'accent" les marques de tous les personnages! Il existe de nombreux qu'il ne fera pas ça. Par exemple, vous ne pouvez pas convertir © de D ou ø pour o de cette façon. Pour cela, vous avez besoin de réduire les points de code à celles qui correspondent à la même primaire classement de la force dans le Classement Unicode Table.
Un autre endroit où l' \p{Mn}
chose échoue est bien sûr en joignant les marques comme \p{Me}
, évidemment, mais il y a aussi \p{Diacritic}
caractères qui ne sont pas des marques. Malheureusement, vous avez besoin de la pleine propriété d'appui, ce qui signifie JNI soit unité de soins intensifs ou Perl. Java a beaucoup de problèmes avec le support de l'Unicode, je le crains.
Oh, attendez, je vois que vous êtes portugais. Vous ne devriez pas avoir de problèmes à tous, alors si vous faites affaire avec texte portugais.
Cependant, vous n'avez pas vraiment envie de supprimer les accents, je parie, mais plutôt vous voulez être en mesure de faire correspondre les choses "accent-insensiblement", à droite? Si oui, alors vous pouvez le faire en utilisant le ICU4J (unité de soins intensifs pour Java) collateur de la classe. Si l'on compare à la principale force, marques d'accent ne compteront pas. Je le fais tout le temps car j'ai souvent le processus de textes en espagnol. J'ai un exemple de procédure à suivre pour l'espagnol assis quelque part par ici si vous en avez besoin.