Come sfuggire a una parentesi quadra per la compilazione del modello
-
16-09-2019 - |
Domanda
Ho da virgola elenco di espressioni regolari separate:
.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]
Ho fatto una spaccatura sulla virgola. Ora sto cercando di corrispondere a questo regex contro una password generata. Il problema è che Pattern.compile
non piace parentesi quadre che non è sfuggito. Qualcuno può per favore mi dia una semplice funzione che prende una stringa in questo modo:. [0-9]
e restituisce la stringa di escape \[0-9\]
Soluzione
È possibile utilizzare Pattern.quote(String)
.
Dalla documentazione:
public static String quote(String s)
Restituisce un
String
modello letterale per ilString
specificato.Questo metodo produce una stringa che può essere usato per creare un modello che corrisponde alla stringa s come se fosse un modello letterale.
Metacaratteri o sequenze di escape nella sequenza di ingresso sarà dato alcun significato particolare.
Altri suggerimenti
Per qualche ragione, la risposta di cui sopra non ha funzionato per me. Per quelli come me che verranno dopo, ecco cosa ho trovato.
Mi aspettavo una singola barra rovesciata per sfuggire alla staffa, tuttavia, è necessario utilizzare due se avete il modello memorizzato in una stringa. Il primo backslash il secondo nella stringa, in modo che ciò che vede regex è \]
. Dal momento che regex vede un solo backslash, si usa per sfuggire alla parentesi quadra.
\\]
In regex, che corrisponderà una singola parentesi quadra di chiusura.
Se stai cercando di abbinare un ritorno a capo, per esempio, però, devi usare un solo backslash. Si sta utilizzando il modello stringa di escape per inserire un carattere di nuova riga nella stringa. Regex non vede \n
- si vede il carattere di nuova riga, e corrisponde a quello. Hai bisogno di due barre rovesciate, perché non è una sequenza di stringa di escape, è una sequenza di espressioni regolari fuga.
È possibile utilizzare il \ Q e caratteri speciali \ E ... nulla tra \ Q e \ E è sfuggito automaticamente.
\Q[0-9]\E
Pattern.compile()
piace parentesi quadre bene. Se si prende la stringa
".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"
e dividerlo su virgole, si finisce con cinque regex perfettamente valide: la prima corrisponde otto caratteri non-line-separatore, il secondo corrisponde a una cifra ASCII, e così via. A meno che non si vuole veramente abbinare stringhe come ".{8}"
e "[0-9]"
, non vedo il motivo per cui si avrebbe bisogno di sfuggire nulla.