2 votes

Comment faire correspondre \Q et \E dans Java regex?

Je veux faire correspondre \Q et \E dans une expression régulière Java. Je suis en train d'écrire un programme qui calculera la longueur de la chaîne correspondant au motif (ce programme suppose qu'il n'y a pas de quantificateur dans l'expression régulière sauf {quelques chiffres}, c'est pourquoi la longueur de la chaîne est définie de manière unique) et je veux d'abord supprimer toutes les expressions comme \Qsome text\E. Mais une expression régulière comme celle-ci :

"\\Q\\Q\\E\\Q\\E\\E"

ne fonctionne évidemment pas.

5voto

Mike Samuel Points 54712

Il suffit d'échapper les antislashs. La séquence \\\\ correspond à un antislash littéral, donc pour correspondre à un \Q littéral :

"\\\\Q"

et pour correspondre à un \E littéral :

"\\\\E"

Vous pouvez le rendre plus lisible pour un mainteneur en rendant évident que chaque séquence correspond à un seul caractère en utilisant [...] comme ceci :

"[\\\\][Q]"

5voto

Bart Kiers Points 79069

Utilisez Pattern.quote(...) :

String s = "\\Q\\Q\\E\\Q\\E\\E";
String escaped = Pattern.quote(s);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X