El Pattern.quote(String s)
fait en quelque sorte ce que vous voulez. Cependant, elle laisse un peu à désirer ; elle n'échappe pas réellement les caractères individuels, mais enveloppe simplement la chaîne de caractères avec le symbole \Q...\E
.
Il n'existe pas de méthode qui permette de faire exactement ce que vous recherchez, mais la bonne nouvelle est qu'il est en fait assez simple d'échapper à tous les caractères spéciaux d'une expression régulière Java :
regex.replaceAll("[\\W]", "\\\\$0")
Pourquoi cela fonctionne-t-il ? Eh bien, la documentation de Pattern
indique spécifiquement qu'il est permis d'échapper à des caractères non alphabétiques qui ne doivent pas nécessairement être échappés :
C'est une erreur d'utiliser une barre oblique inverse avant tout caractère alphabétique qui ne désigne pas une construction échappée ; ces caractères sont réservés pour de futures extensions du langage d'expression régulière. Une barre oblique inverse peut être utilisée avant un caractère non alphabétique, que ce caractère fasse partie ou non d'une construction non encodée.
Par exemple, ;
n'est pas un caractère spécial dans une expression régulière. Toutefois, si vous l'échappez, Pattern
interprétera toujours \;
comme ;
. Voici quelques autres exemples :
-
>
devient \>
ce qui est équivalent à >
-
[
devient \[
qui est la forme échappée de [
-
8
est toujours 8
.
-
\)
devient \\\)
qui sont les formes échappées de \
y (
concaténés.
Nota: La clé est la définition de "non-alphabétique", qui, dans la documentation, signifie en réalité "non alphabétique". mot "ou des caractères qui ne font pas partie du jeu de caractères [a-zA-Z_0-9]
.