Es wäre großartig, eine bequeme Möglichkeit zu haben, Muster mit einem einzelnen Backslash zu speichern. Einige Workarounds: Speichern Sie es in der Datei und verwenden Sie NIO zu lesen. Nachteile: Java EE erlaubt keinen IO-Zugriff. Irgendwie in JNDI speichern. Vielleicht neu in Java 5 Pattern.LITERAL
Flagge helfen kann? Ich möchte mit einer normalen Musterzeichenkette arbeiten, wie \d
no \\d
.
Antworten
Zu viele Anzeigen?Das Problem ist, dass \
ist in Java ein spezielles Zeichen, wenn ein String erstellt wird, unabhängig davon, ob eine Regexp vorhanden ist oder nicht.
z.B. String s = "\t";
Sie können dies jedoch nicht für beliebige Zeichen verwenden, String s = "\a";
führt zu einem Kompilierungsfehler. Die gültigen Zeichen sind b, t, n, f, r, ", ' und \
um also eine wörtliche \
in einer Zeichenkette in Java müssen Sie es wie folgt entschlüsseln: \\
. aus diesem Grund wird Ihr sólo Option ist es, diese Zeichenketten NICHT in Java-Dateien zu haben, sondern in einer externen Datei, die von Ihrer Java-Datei geladen wird. Pattern.LITERAL
hilft nicht weiter, da Sie immer noch eine gültige Java-Zeichenkette benötigen, die \d
ist es nicht.
Wenn Sie nur in Java arbeiten, rate ich Ihnen, sich darüber keine Gedanken zu machen. Speichern Sie die Regex einfach so, wie Java sie verstehen kann, d.h. mit dem lästigen Doppel \
.
WENN und NUR WENN Sie die Regex speichern möchten, um sie als Dateieingabe für verschiedene Sprachen zu verwenden, dann erstellen Sie die Textdatei unter Verwendung der Standard-Regex-Notation. Aber dann müssen Sie eine Art Klasse erstellen, die ein Zeichen für Zeichen liest und sich selbst um die Maskierung der Zeichen kümmert, bevor sie der Zeichenkette hinzugefügt werden, die für den Pattern Matcher verwendet werden soll.
Es ist eine Menge Arbeit (eigentlich nicht viel, aber verdammt, wenn es nicht pingelig ist), aber Sie müssen es nur einmal tun, und Sie könnten es für mehrere Sprachen erweitern, wäre eine gute Lernerfahrung meiner Meinung nach. Machen Sie es jedoch falsch und Sie werden bei der Fehlersuche in diesem kleinen Bastard sehr leiden.
Es könnte eine nette, wenn auch nicht lebenswichtige Ergänzung zu Java sein, eine Art Flag, das es erlaubt, einen Text aus einer Datei direkt als Regex-Standard-String zu lesen, der die notwendigen Änderungen selbst vornimmt. Ich muss überprüfen, ob jemand diese Funktion vorgeschlagen hat.
PS: Ich habe gerade bemerkt, dass man hier die \
um sie sichtbar zu machen... das ist seltsam...