2011-02-04 12 views
5

Sto cercando di abbinare un carattere di controllo nella forma \^c dove c è un carattere valido per i caratteri di controllo. Ho questa espressione regolare, ma al momento non funziona: \\[^][@-z]Che cosa è un'espressione regolare per i caratteri di controllo?

Penso che il problema risiede nel fatto che il carattere di omissione (^) fa parte del motore di analisi delle espressioni regolari.

+0

Questo non ha senso per me. C'è una barra rovesciata lì? Sono questi veri caratteri di controllo, o qualche sequenza ASCII che implica lo stesso? Perché go \ c @ .. \ cZ solo? Ce ne sono altri, lo sai. – tchrist

+0

Perché stai inserendo il cursore in una classe di caratteri? –

+0

Sto cercando di far corrispondere il testo letterale per i caratteri di controllo, non i caratteri di controllo stessi. –

risposta

7

Abbinare una stringa di testo ASCII del modulo ^X utilizzando il modello \^., niente di più. Abbina una stringa di testo ASCII del modulo \^X con il modello \\\^.. Potresti voler limitare quel punto a [[email protected]_\[\]^\\], quindi \\\^[[email protected]_\[\]^\\]. È più facile leggere come [?\x40-\x5F] per la classe di caratteri con bracketing, quindi \\\^[?\x40-\x5F] per un BACKSLASH letterale, seguito da un CIRCUMFLEX letterale, seguito da qualcosa che diventa uno dei caratteri di controllo validi.

Nota che questo è il risultato della stampa del motivo o di ciò che hai letto da un file. È ciò che devi passare al compilatore regex. Se lo hai come stringa letterale, devi ovviamente raddoppiare ciascuno di quei backslash. `\\\\\\^[?\\x40-\\x5F]" Sì, è assurdo, ma perché Java non supporta regex direttamente come Groovy e Scala - o Perl e Ruby - fanno. Il lavoro di Regex è sempre più facile senza l'extra bbaacckksslllllaasshheesssssess. :)

Se avete avuto caratteri di controllo veri e propri, invece di rappresentazioni indirette di loro, si usa \pC per tutti i punti di codice letterali con la proprietà GC = Altro, o \p{Cc} solo per GC = Controllo.

+0

Non sono sicuro di aver capito \ pC. Sto scrivendo un analizzatore lessicale usando JLex e ho bisogno di riconoscere sequenze di caratteri di controllo validi in una stringa e tradurli nei loro equivalenti ASCII. Ad esempio, la stringa "\^g" stamperà il carattere della campana o farà suonare l'altoparlante del computer. Ho bisogno di un'espressione regolare per abbinare sequenze di caratteri di controllo come "\^g". –

+0

@pcman: hai un BACKSLASH letterale seguito da un CIRCUMFLEX letterale seguito da un carattere che è uno di '[A-Z @? \ [\] _ ^]'? – tchrist

+0

Sì, sto cercando di far corrispondere il testo letterale come apparirebbe in una stringa. –

2

Controllare questo: http://www.regular-expressions.info/characters.html. Dovresti essere in grado di usare \ cA per \ cZ per trovare i caratteri di controllo.

+1

E riguardo '\ c?' Per DELETE (U + 7F)? Sapevi che Java pensa '\ c {' is ';' e che '\ c;' è '{'? Hanno dimenticato di controllare che il risultato sia '\ p {Cc}'. Oops! – tchrist

Problemi correlati