Die Pattern.quote(String s)
Art macht, was Sie wollen. Es lässt jedoch ein wenig zu wünschen übrig; Es entgeht nicht den einzelnen Zeichen, sondern umschließt nur die Zeichenfolge mit \Q...\E
.
Es gibt keine Methode, die genau das tut, wonach Sie suchen, aber die gute Nachricht ist, dass es eigentlich ziemlich einfach ist, alle Sonderzeichen in einem regulären Java-Ausdruck zu umgehen:
regex.replaceAll("[\\W]", "\\\\$0")
Warum funktioniert das? Nun, die Dokumentation für Pattern
besagt ausdrücklich, dass es zulässig ist, nicht alphabetische Zeichen zu maskieren, die nicht unbedingt maskiert werden müssen:
Es ist ein Fehler, vor einem alphabetischen Zeichen, das kein maskiertes Konstrukt kennzeichnet, einen Backslash zu verwenden. Diese sind für zukünftige Erweiterungen der Sprache für reguläre Ausdrücke reserviert. Ein Backslash kann vor einem nicht alphabetischen Zeichen verwendet werden, unabhängig davon, ob dieses Zeichen Teil eines nicht entflohenen Konstrukts ist.
Zum Beispiel ;
ist kein Sonderzeichen in einem regulären Ausdruck. Wenn Sie jedoch entkommen, Pattern
wird immer noch \;
als interpretiert ;
. Hier noch ein paar Beispiele:
>
wird \>
was äquivalent zu ist>
[
wird \[
was ist die entkommene Form von[
8
ist immer noch 8
.
\)
wird \\\)
was die entkommenen Formen von \
und (
verkettet ist.
Hinweis: Der Schlüssel ist die Definition von "nicht alphabetisch", was in der Dokumentation wirklich "Nicht- Wort " -Zeichen oder Zeichen außerhalb des Zeichensatzes bedeutet [a-zA-Z_0-9]
.