[^\x20-\x7E]
vi este modelo se usa para una expresión regular en la que el objetivo era eliminar la no-ascii caracteres de una cadena. Qué significa eso?Propósito de [^ x20- X7E] en expresiones regulares
[^\x20-\x7E]
vi este modelo se usa para una expresión regular en la que el objetivo era eliminar la no-ascii caracteres de una cadena. Qué significa eso?Propósito de [^ x20- X7E] en expresiones regulares
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 ~
.
Significa "cualquier cosa que no sea un código de carácter en el rango hexadecimal 0x20 a 0x7E, es decir, 32 a 126".
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.
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. øüéåç ...
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. –
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. –
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. –
es decir, los caracteres imprimibles – annakata
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