5 Stimmen

Java Regexp-Muster haben doppelte Backslashes, wie speichert man Muster in lesbarem Format

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 .

6voto

chris Punkte 9335

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.

1voto

Dilum Ranatunga Punkte 13094

Wenn Sie daran interessiert sind, die Ausdrücke aus einer Datei zu lesen, sollten Sie die Datei in das jar packen und mit Class.getResourceAsStream(...) . Soweit ich weiß, ist das in Java EE immer noch erlaubt.

0voto

rciafardone Punkte 125

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...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X