Frage

Ich habe eine durch Kommas getrennte Liste regulärer Ausdrücke:

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]

Ich habe das Komma getrennt.Jetzt versuche ich, diesen regulären Ausdruck mit einem generierten Passwort abzugleichen.Das Problem ist, dass Pattern.compile mag keine eckigen Klammern, die nicht maskiert werden.Können mir bitte einige eine einfache Funktion geben, die eine Zeichenfolge wie folgt akzeptiert: [0-9] und gibt die maskierte Zeichenfolge zurück \[0-9\].

War es hilfreich?

Lösung

Sie können verwenden Pattern.quote(String).

Aus den Dokumenten:

public static String quote​(String s)

Gibt ein Literalmuster zurück String für das angegebene String.

Diese Methode erzeugt einen String, der zum Erstellen eines Musters verwendet werden kann, das mit dem String s übereinstimmt, als wäre es ein Literalmuster.

Metazeichen oder Escape-Sequenzen in der Eingabesequenz erhalten keine besondere Bedeutung.

Andere Tipps

Aus irgendeinem Grund hat die obige Antwort bei mir nicht funktioniert. Für diejenigen wie mich, die danach kommen, ist hier, was ich gefunden habe.

Ich hatte erwartet, dass ein einzelner Backslash aus der Halterung entkommt. Sie müssen jedoch zwei verwenden, wenn Sie das Muster in einer Saite gespeichert haben. Der erste Backslash entkommt dem zweiten in die Saite, so dass Regex sieht \]. Da Regex nur einen Backslash sieht, wird es verwendet, um der quadratischen Klammer zu entkommen.

\\] 

In Regex entspricht dies mit einer einzigen schließenden Quadratklammer.

Wenn Sie beispielsweise versuchen, eine neue Linie zu erreichen, verwenden Sie nur einen einzelnen Backslash. Sie verwenden das String Escape -Muster, um ein neues Zeilenzeichen in die Zeichenfolge einzufügen. Regex sieht nicht \n - Es sieht den Newline -Charakter und entspricht dem. Sie benötigen zwei Backslashes, weil es sich nicht um eine String -Escape -Sequenz handelt, sondern eine Regex -Escape -Sequenz.

Sie können die q- und e -Sonderzeichen verwenden ... alles zwischen q und e wird automatisch entkommen.

\Q[0-9]\E

Pattern.compile() mag quadratische Klammern gut. Wenn Sie die Zeichenfolge nehmen

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"

Und teilen Sie es auf Kommas auf, Sie haben fünf perfekt gültige Regexes: Der erste entspricht acht Nicht-Line-Separator-Zeichen, der zweite entspricht einer ASCII-Ziffer und so weiter. Es sei denn, Sie möchten wirklich Streicher wie möglich anpassen ".{8}" und "[0-9]", Ich verstehe nicht, warum Sie etwas entkommen müssten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top