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\]

È stato utile?

Soluzione

È possibile utilizzare Pattern.quote(String) .

Dalla documentazione:

  

public static String quote​(String s)

     

Restituisce un String modello letterale per il String 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top