2009-06-11 11 views

risposta

35

Si dice qualcosa come: tutti i caratteri che non (^) sono nella gamma \x20-\x7E (hex 0x20-0x7E).

Secondo http://www.asciitable.com/, questi sono caratteri dallo spazio a ~.

+8

ovvero i caratteri stampabili – annakata

+0

È opportuno notare che è possibile utilizzare anche le API per eseguire il controllo. Ad esempio, in Java è possibile utilizzare java.lang.Character.isISOControl (carattere) e metodi simili che rendono il codice più leggibile. – Stan

2

Significa "qualsiasi cosa che non sia un codice di carattere nell'intervallo esadecimale da 0x20 a 0x7E, cioè da 32 a 126".

2

Il segno di omissione (^) all'interno delle parentesi [] significa "non", e \ x20- \ x7E indica un intervallo di caratteri ascii, dove \ x20 (spazio) è l'inizio dell'intervallo e \ x7E (~) è la fine. È praticamente tutto ciò che non è una lettera, un numero o una punteggiatura comune.

5

Significa che corrisponde a qualsiasi carattere che non stampa caratteri.

caratteri di stampa includono a alla z, dalla A alla Z, da 0 a 9 e simboli quali"; $ #% ecc

^ not 
\x20 hex code for space character 
- to 
\x7e hex code for ~ (tilde) character 

Tutti i caratteri di stampa ASCII cadono tra questi due

.

Questa dichiarazione corrisponde ai caratteri non ASCII, nonché di controllo ASCII (non stampa) personaggi come campana, scheda, nulla e gli altri.

Guarda

man ascii 

su un sistema unix per vedere quali caratteri corrisponde.

in Perl, si potrebbe anche scrivere questo come

[^ -~] 

o

[[:^cntrl:]] 

Quest'ultimo è leggermente diverso, nel senso che corrisponde a qualsiasi carattere non di controllo, tra cui ASCII estesi (ad esempio accentata caratteri) e unicode.

Potresti non voler limitarti a solo ascii, poiché le posizioni non statunitensi utilizzano spesso caratteri di stampa validi al di fuori di questo intervallo ridotto, ad es. øüéåç ...

+0

Penso che tu intendessi [^ [: print:]] per quest'ultimo. La notazione della classe di caratteri POSIX include le parentesi quadre e i due punti, e l'intera cosa deve essere posizionata all'interno di un'altra serie di parentesi quadre. (E naturalmente, [: cntrl:] è la classe sbagliata.) Tuttavia, anche le classi POSIX dovrebbero essere sensibili alle impostazioni internazionali, il che significa che potrebbero corrispondere, ad esempio, alle lettere accentate e al set ASCII di base. –

+0

Ah sì, era sciatto (era tardi). il cntrl è in effetti diverso da quelli precedenti, nel senso che includerà caratteri di stampa negli intervalli ascii estesi e persino in unicode, ma credo che sia probabile che sia ciò che era inteso. –

+0

Suggerirei di lasciare da solo le classi di caratteri POSIX, specialmente in un caso come questo, in cui non si sa quale stile di espressione regolare viene utilizzato, quale sistema operativo è in esecuzione o in quale locale. Tutti questi fattori possono cambiare il loro comportamento. –

Problemi correlati