2013-04-23 13 views
8

Ho un problema con un'espressione regolare in Javavalido sequenza di escape (quelli validi sono b t n f r " ' )

Quando provo ad usare questa espressione regolare:.

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 

ottengo il seguente errore

"Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \)" 

non so come gestire tale errore. ho già provato a raddoppiare le barre inverse, ma non ha funzionato. Spero che qualcuno possa aiutare io con questo.

Grazie

+0

Si tratta di un errore Java o di un errore Regex? – Matthew

+0

bene hai \ d e non è in quelli validi – phil

+1

raddoppiando i backslash dovrebbero funzionare. Sei sicuro di non averne perso uno? – Philipp

risposta

10

questo dovrebbe funzionare ^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$

La ragione è che i simboli elencati nel messaggio di errore hanno un significato particolare, ma \d non è uno di quei simboli speciali definiti per l'utilizzo di \, questo significa che hai per evitarlo (aggiungendo un extra \ davanti al simbolo).

+0

Aiutami a risolvere questo problema con java "/^(?: https?: \/\ /)? (?: www \.)? (?: youtu \ .be \/| youtube \ .com \/(?: embed \/| v \/| watch \? v = | watch \?. + & v =)) ((\ w | -) {11}) (?: \ S +)? $/" – Ashu

7

Ogni volta che si scrivono espressioni regolari in Java, ricordare di sfuggire ai caratteri \ utilizzati nella stringa che definisce l'espressione regolare. In altre parole, se la tua espressione regolare contiene uno \, DEVI scrivere due \\. Ad esempio, il codice dovrebbe essere simile a questo:

^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$ 

Perché, vi chiederete? perché nelle stringhe di Java, \ è il carattere di escape utilizzato per indicare caratteri speciali (esempio: tabulazioni, nuove righe, ecc.) e se una stringa contiene uno \ deve essere preceduto da escape, anteponendo un altro \ di fronte. Quindi, \\.

Per la cronaca, here è la pagina specifica del linguaggio Java che elenca i caratteri di escape validi e il loro significato, notare l'ultimo:

\b backspace 
\t horizontal tab 
\n linefeed 
\f form feed 
\r carriage return 
\" double quote 
\' single quote 
\\ backslash 
1

è possibile utilizzare Notepad ++ con find/e sostituirlo con //

+1

Qual è il punto di sostituendo '/' con '//'? È '' \ '' che è speciale in regex o string letteral quindi è necessario eseguire l'escape. – Pshemo

Problemi correlati