2009-06-11 32 views

Respuesta

35

Se dice algo así como: todos los caracteres que no (^) están en el rango \x20-\x7E (hex 0x20-0x7E).

Según http://www.asciitable.com/, esos son caracteres del espacio a ~.

+8

es decir, los caracteres imprimibles – annakata

+0

Es bueno tener en cuenta que también puede usar las API para realizar el control. Por ejemplo, en Java puede usar java.lang.Character.isISOControl (character) y métodos similares que hacen que su código sea más legible. – Stan

2

Significa "cualquier cosa que no sea un código de carácter en el rango hexadecimal 0x20 a 0x7E, es decir, 32 a 126".

2

El símbolo de intercalación (^) dentro de los corchetes [] significa "no", y \ x20- \ x7E denota un rango de caracteres ascii, donde \ x20 (espacio) es el comienzo del rango, y \ x7E (~) es el final. Básicamente es cualquier cosa que no sea una letra, número o puntuación común.

5

Significa que coinciden todos los caracteres que no están imprimiendo caracteres.

caracteres de impresión incluyen un a z, A a la Z, del 0 al 9 y símbolos como",; $ #% etc.

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

Todos los caracteres de impresión ASCII caen entre estos dos

.

Esta declaración coincide con caracteres no ASCII, así como el control ASCII (sin impresión) personajes como campana, pestaña, nula y otros.

Mira

man ascii 

en un sistema Unix para ver qué caracteres concuerdan.

en Perl, también se puede escribir esto como

[^ -~] 

o

[[:^cntrl:]] 

Este último es un poco diferente, ya que coincide con cualquier carácter que no sea de control, incluyendo ASCII extendido (por ejemplo, con acento caracteres) y unicode.

Puede que no desee restringirse solo a asci, ya que las ubicaciones que no son de los Estados Unidos a menudo usan caracteres de impresión válidos fuera de este rango pequeño, p. øüéåç ...

+0

Creo que quiso decir [^ [: imprimir:]] para ese último. La notación de clase de caracteres POSIX incluye los corchetes, así como los dos puntos, y todo debe colocarse dentro de otro conjunto de corchetes. (Y por supuesto, [: cntrl:] es la clase incorrecta.) Sin embargo, las clases POSIX también se supone que son sensibles a la configuración regional, lo que significa que pueden coincidir, por ejemplo, letras acentuadas, así como el conjunto ASCII básico. –

+0

Ah sí, eso fue descuidado (era tarde). cntrl es de hecho diferente a los anteriores, en el sentido de que incluirá caracteres de impresión en los intervalos ascii e incluso unicode extendidos, pero creo que es probable que así sea. –

+0

Aconsejaría dejar solo las clases de caracteres POSIX, especialmente en un caso como este, donde no sabemos qué sabor regex se está usando, en qué sistema operativo se está ejecutando o en qué entorno local. Todos esos factores pueden cambiar su comportamiento. –