Este es el comando perlrecharclass que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
perlrecharclass - Clases de caracteres de expresión regular de Perl
DESCRIPCIÓN
La documentación de nivel superior sobre las expresiones regulares de Perl se encuentra en perlre.
Esta página de manual analiza la sintaxis y el uso de clases de caracteres en Perl regular.
expresiones
Una clase de caracteres es una forma de denotar un conjunto de caracteres de tal manera que uno
el carácter del conjunto coincide. Es importante recordar que: hacer coincidir un personaje
clase consume exactamente un carácter en la cadena de origen. (La cadena de origen es la
cadena con la que se compara la expresión regular).
Hay tres tipos de clases de caracteres en las expresiones regulares de Perl: el punto, la barra invertida
secuencias y la forma entre corchetes. Tenga en cuenta, sin embargo, que a menudo el
El término "clase de carácter" se utiliza para referirse únicamente a la forma entre corchetes. Ciertamente, la mayoría de Perl
la documentación hace eso.
El punto
El punto (o punto), "." es probablemente el más utilizado, y ciertamente el más conocido
clase de personaje. De forma predeterminada, un punto coincide con cualquier carácter, excepto con el salto de línea. Ese
el valor predeterminado se puede cambiar para agregar que coincida con la nueva línea utilizando el soltero línea modificador:
ya sea para toda la expresión regular con el modificador "/ s", o localmente con "(? s)".
(La secuencia de barra invertida "\ N", que se describe a continuación, coincide con cualquier carácter excepto la nueva línea
sin tener en cuenta el soltero línea modificador.)
He aquí algunos ejemplos:
"a" = ~ /./ # Fósforo
"." = ~ /./ # Fósforo
"" = ~ /./ # No coincide (el punto tiene que coincidir con un carácter)
"\ n" = ~ /./ # No coincide (el punto no coincide con una nueva línea)
"\ n" = ~ /./s # Coincidencia (modificador global de 'línea única')
"\ n" = ~ /(?s:.)/ # Match (modificador local de 'línea única')
"ab" = ~ /^.$/ # No coincide (el punto coincide con un carácter)
Barra invertida secuencias
Una secuencia de barra invertida es una secuencia de caracteres, el primero de los cuales es una barra invertida.
Perl atribuye un significado especial a muchas de estas secuencias, y algunas de ellas son caracteres
clases. Es decir, coinciden con un solo carácter cada uno, siempre que el personaje pertenezca
al conjunto específico de caracteres definido por la secuencia.
Aquí hay una lista de las secuencias de barra invertida que son clases de caracteres. Se discuten
con más detalle a continuación. (Para las secuencias de barra invertida que no son clases de caracteres, consulte
perlretrocesobarra invertida.)
\ d Coincide con un carácter de dígito decimal.
\ D Coincide con un carácter de dígito no decimal.
\ w Coincide con un carácter de "palabra".
\ W Coincide con un carácter que no sea "palabra".
\ s Coincide con un carácter de espacio en blanco.
\ S Coincide con un carácter que no sea un espacio en blanco.
\ h Coincide con un carácter de espacio en blanco horizontal.
\ H Coincide con un carácter que no sea un espacio en blanco horizontal.
\ v Coincide con un carácter de espacio en blanco vertical.
\ V Coincide con un carácter que no sea un espacio en blanco vertical.
\ N Coincide con un carácter que no sea una nueva línea.
\ pP, \ p {Prop} Coincide con un carácter que tenga la propiedad Unicode dada.
\ PP, \ P {Prop} Coincide con un carácter que no tiene la propiedad Unicode
\N
"\ N", disponible a partir de la v5.12, como el punto, coincide con cualquier carácter que no sea un
nueva línea. La diferencia es que "\ N" no está influenciado por el soltero línea regular
modificador de expresión (ver "El punto" arriba). Tenga en cuenta que la forma "\ N {...}" puede significar
algo completamente diferente. Cuando "{...}" es un cuantificador, significa hacer coincidir un
carácter que no es de nueva línea tantas veces. Por ejemplo, "\ N {3}" significa coincidir con 3
nuevas líneas; "\ N {5,}" significa coincidir con 5 o más líneas que no son nuevas. Pero si "{...}" no es legal
cuantificador, se presume que es un carácter con nombre. Ver nombres de caracteres para esos. Para
ejemplo, ninguno de "\ N {COLON}", "\ N {4F}" y "\ N {F4}" contienen cuantificadores legales, por lo que Perl
intentará encontrar caracteres cuyos nombres sean respectivamente "COLON", "4F" y "F4".
Dígitos
"\ d" coincide con un solo carácter que se considera decimal dígito. Si el "/ a" regular
El modificador de expresión está en efecto, coincide con [0-9]. De lo contrario, coincide con cualquier cosa que
coincide con "\ p {Digit}", que incluye [0-9]. (Una posible excepción improbable es que
según las reglas de coincidencia de configuración regional, es posible que la configuración regional actual no coincida con "[0-9]" con "\ d",
y / o puede coincidir con otros caracteres cuyo punto de código sea menor que 256. El único
Las definiciones de configuración regional que son legales deberían coincidir con "[0-9]" más otro conjunto de 10
caracteres de dígitos consecutivos; cualquier otra cosa violaría el lenguaje C
estándar, pero Perl actualmente no asume nada con respecto a esto).
Lo que esto significa es que, a menos que el modificador "/ a" esté en efecto, "\ d" no solo coincide con el
dígitos '0' - '9', pero también árabe, devanagari y dígitos de otros idiomas. Esto puede
causar cierta confusión y algunos problemas de seguridad.
Algunos dígitos que coinciden con "\ d" se parecen a algunos de los [0-9], pero tienen valores diferentes.
Por ejemplo, BENGALI DIGIT FOUR (U + 09EA) se parece mucho a un ASCII DIGIT OCHO
(U + 0038). Una aplicación que espera solo los dígitos ASCII puede ser engañada, o si
la coincidencia es "\ d +", la cadena coincidente puede contener una combinación de dígitos de diferentes
sistemas de escritura que parecen significar un número diferente de lo que realmente significan.
"num ()"en Unicode :: UCD se puede utilizar para calcular de forma segura el valor, devolviendo" undef "si
la cadena de entrada contiene tal mezcla.
Lo que significa "\ p {Digit}" (y por lo tanto "\ d" excepto bajo el modificador "/ a") es
"\ p {General_Category = Decimal_Number}", o como sinónimo, "\ p {General_Category = Digit}".
A partir de la versión 4.1 de Unicode, este es el mismo conjunto de caracteres que coincide con
"\ p {Numeric_Type = Decimal}". Pero Unicode también tiene una propiedad diferente con una similar
nombre, "\ p {Numeric_Type = Digit}", que coincide con un conjunto de caracteres completamente diferente.
Estos caracteres son cosas como "CÍRCULO UNO DÍGITO" o subíndices, o provienen de la escritura
sistemas que carecen de los diez dígitos.
La intención del diseño es que "\ d" coincida exactamente con el conjunto de caracteres que se pueden
se utiliza con la sintaxis decimal posicional big-endian "normal", donde, por ejemplo, 123 significa uno
'cien', más dos 'decenas', más tres 'unidades'. Esta notación posicional no
se aplica necesariamente a los caracteres que coinciden con el otro tipo de "dígito",
"\ p {Numeric_Type = Digit}", por lo que "\ d" no coincide con ellos.
Los dígitos tamil (U + 0BE6 - U + 0BEF) también se pueden usar legalmente en números tamil de estilo antiguo en
que aparecerían no más de uno en una fila, separados por caracteres que significan
"multiplicado por 10", "multiplicado por 100", etc.http://www.unicode.org/notes/tn21>.)
Cualquier carácter que no coincida con "\ d" se corresponde con "\ D".
Word personajes
Una "\ w" coincide con un solo carácter alfanumérico (un carácter alfabético o un decimal
dígito); o un carácter de puntuación de conexión, como un guión bajo ("_"); o una "marca"
carácter (como una especie de acento) que se adhiere a uno de esos. No coincide con un
toda palabra. Para hacer coincidir una palabra completa, use "\ w +". Esto no es lo mismo que hacer coincidir un
Palabra en inglés, pero en el rango ASCII es lo mismo que una cadena de identificador de Perl
personajes.
Si el modificador "/ a" está en efecto ...
"\ w" coincide con los 63 caracteres [a-zA-Z0-9_].
de lo contrario ...
Para puntos de código por encima de 255 ...
"\ w" coincide con "\ p {Word}" en este rango. Es decir, coincide
Letras tailandesas, letras griegas, etc. Esto incluye puntuación del conector (como la
subrayado) que conectan dos palabras juntas, o signos diacríticos, como una "COMBINACIÓN
TILDE "y las letras modificadoras, que generalmente se usan para agregar auxiliares
marcas a letras.
Para puntos de código por debajo de 256 ...
si las reglas de configuración regional están en vigor ...
"\ w" coincide con el carácter de subrayado nativo de la plataforma más cualquier
locale se considera alfanumérico.
si las reglas Unicode están en vigor ...
"\ w" coincide exactamente con lo que coincide con "\ p {Word}".
de lo contrario ...
"\ w" coincide con [a-zA-Z0-9_].
Las reglas que se aplican se determinan como se describe en "¿Qué modificador de juego de caracteres está en
efecto? "en perlre.
Hay una serie de problemas de seguridad con la lista Unicode completa de caracteres de palabras. Ver
<http://unicode.org/reports/tr36>.
Además, para un conjunto de caracteres algo más detallado que están en lenguaje de programación
identificadores más allá del rango ASCII, es posible que desee utilizar los más personalizados
"Propiedades Unicode", "\ p {ID_Start}", "\ p {ID_Continue}", "\ p {XID_Start}" y
"\ p {XID_Continue}". Verhttp://unicode.org/reports/tr31>.
Cualquier carácter que no coincida con "\ w" se corresponde con "\ W".
Espacio en blanco
"\ s" coincide con cualquier carácter individual considerado espacio en blanco.
Si el modificador "/ a" está en efecto ...
En todas las versiones de Perl, "\ s" coincide con los 5 caracteres [\ t \ n \ f \ r]; eso es el
tabulación horizontal, la nueva línea, el avance de página, el retorno de carro y el espacio.
A partir de Perl v5.18, también coincide con la pestaña vertical, "\ cK". Ver nota "[1]" a continuación
para una discusión de esto.
de lo contrario ...
Para puntos de código por encima de 255 ...
"\ s" coincide exactamente con los puntos de código por encima de 255 que se muestran con una columna "s" en el
La mesa debajo.
Para puntos de código por debajo de 256 ...
si las reglas de configuración regional están en vigor ...
"\ s" coincide con lo que la configuración regional considere espacios en blanco.
si las reglas Unicode están en vigor ...
"\ s" coincide exactamente con los caracteres que se muestran con una columna "s" en la tabla
abajo.
de lo contrario ...
"\ s" coincide con [\ t \ n \ f \ r] y, a partir de Perl v5.18, la pestaña vertical, "\ cK".
(Consulte la nota "[1]" a continuación para ver una discusión sobre esto). Tenga en cuenta que esta lista no
incluir el espacio de no rotura.
Las reglas que se aplican se determinan como se describe en "¿Qué modificador de juego de caracteres está en
efecto? "en perlre.
Cualquier carácter que no coincida con "\ s" se corresponde con "\ S".
"\ h" coincide con cualquier carácter considerado espacio en blanco horizontal; esto incluye la plataforma
caracteres de espacio y tabulación y varios otros que se enumeran en la tabla siguiente. "\ H" coincide con cualquier
carácter no considerado espacio en blanco horizontal. Usan el carácter nativo de la plataforma.
set, y no considere ninguna configuración regional que de otro modo pueda estar en uso.
"\ v" coincide con cualquier carácter considerado espacio en blanco vertical; esto incluye la plataforma
caracteres de retorno de carro y salto de línea (nueva línea) más varios otros caracteres, todos
enumerados en la tabla siguiente. "\ V" coincide con cualquier carácter que no se considere espacio en blanco vertical.
Usan el juego de caracteres nativo de la plataforma y no consideran ninguna configuración regional que pueda
de lo contrario, estará en uso.
"\ R" coincide con cualquier cosa que pueda considerarse una nueva línea según las reglas Unicode. Puede coincidir con un
secuencia de varios caracteres. No se puede utilizar dentro de una clase de caracteres entre corchetes; usa "\ v"
en su lugar (espacio en blanco vertical). Utiliza el juego de caracteres nativo de la plataforma y no
considere cualquier configuración regional que de otro modo podría estar en uso. Los detalles se discuten en
barra invertida perl.
Tenga en cuenta que, a diferencia de "\ s" (y "\ d" y "\ w"), "\ h" y "\ v" siempre coinciden con los mismos caracteres,
sin tener en cuenta otros factores, como la configuración regional activa o si la cadena de origen es
en formato UTF-8.
Uno podría pensar que "\ s" es equivalente a "[\ h \ v]". De hecho, esto es cierto a partir de Perl.
v5.18, pero antes de eso, la única diferencia era que la pestaña vertical ("\ cK") no estaba
emparejado por "\ s".
La siguiente tabla es una lista completa de caracteres que coinciden con "\ s", "\ h" y "\ v" como
de Unicode 6.3.
La primera columna da el punto de código Unicode del carácter (en formato hexadecimal), la segunda
columna da el nombre (Unicode). La tercera columna indica por qué clase (s)
el carácter coincide (asumiendo que no existe ninguna configuración regional que cambie la coincidencia "\ s").
0x0009 TABULACIÓN DE CARACTERES hs
0x000a AVANCE DE LÍNEA (LF) vs
0x000b TABULACIÓN DE LÍNEA frente a [1]
0x000c ALIMENTACIÓN DE FORMULARIO (FF) frente a
0x000d RETORNO DE CARRO (CR) vs
0x0020 ESPACIO hs
0x0085 SIGUIENTE LÍNEA (NEL) frente a [2]
0x00a0 ESPACIO SIN ROTURA hs [2]
0x1680 MARCA ESPACIAL OGHAM hs
0x2000 EN QUAD hs
0x2001 EM QUAD hs
0x2002 ESPACIO EN hs
0x2003 EM ESPACIO hs
0x2004 ESPACIO TRES POR EM hs
0x2005 ESPACIO CUATRO POR EM hs
0x2006 ESPACIO SEIS POR EM hs
0x2007 ESPACIO DE FIGURAS hs
0x2008 ESPACIO DE PUNTUACIÓN hs
0x2009 ESPACIO FINO hs
0x200a ESPACIO DE PELO hs
0x2028 SEPARADOR DE LÍNEA vs
0x2029 SEPARADOR DE PÁRRAFOS vs
0x202f ESPACIO ESTRECHO SIN ROTURAS hs
0x205f ESPACIO MATEMÁTICO MEDIO hs
0x3000 ESPACIO IDEOGRÁFICO hs
[1] Antes de Perl v5.18, "\ s" no coincidía con la pestaña vertical. "[^ \ S \ cK]" (oscuramente)
coincide con lo que "\ s" hacía tradicionalmente.
[2] NEXT LINE y NO-BREAK SPACE pueden coincidir o no con "\ s" según las reglas de
efecto. Vea el comienzo de esta sección.
Unicode Propiedad
"\ pP" y "\ p {Prop}" son clases de caracteres para coincidir con caracteres que se ajustan a Unicode dado
propiedades. Los nombres de propiedad de una letra se pueden usar en el formulario "\ pP", con la propiedad
nombre que sigue a la "\ p", de lo contrario, se requieren llaves. Al usar aparatos ortopédicos, hay un
forma única, que es solo el nombre de la propiedad entre llaves, y una forma compuesta
que se parece a "\ p {nombre = valor}", lo que significa coincidir si la propiedad "nombre" para el
personaje tiene ese "valor" particular. Por ejemplo, se puede escribir una coincidencia para un número
como "/ \ pN /" o como "/ \ p {Número} /", o como "/ \ p {Número = Verdadero} /". Las letras minúsculas coinciden
por la propiedad Letra minúscula que tiene la forma corta Ll. Necesitan los aparatos ortopédicos, también
escrito como "/ \ p {Ll} /" o "/ \ p {Minúscula_Letra} /", o
"/ \ p {General_Category = Lowercase_Letter} /" (los guiones bajos son opcionales). "/ \ pLl /" es
válido, pero significa algo diferente. Coincide con una cadena de dos caracteres: una letra
(Propiedad Unicode "\ pL"), seguida de una "l" minúscula.
Si las reglas de configuración regional no están en vigor, el uso de una propiedad Unicode forzará la
expresión en el uso de reglas Unicode, si aún no lo está.
Tenga en cuenta que casi todas las propiedades son inmunes a la coincidencia que no distingue entre mayúsculas y minúsculas. Es decir, agregando
un modificador de expresión regular "/ i" no cambia lo que coinciden. Hay dos conjuntos
que se ven afectados. El primer conjunto es "Uppercase_Letter", "Lowercase_Letter" y
"Titlecase_Letter", todos los cuales coinciden con "Cased_Letter" debajo de "/ i". El segundo set
es "Mayúsculas", "Minúsculas" y "Título en mayúsculas", todas las cuales coinciden con "Cased" debajo de "/ i"
pareo. (La diferencia entre estos conjuntos es que algunas cosas, como los números romanos,
vienen en mayúsculas y minúsculas, por lo que están "en mayúsculas", pero no se consideran
letras, por lo que no son "Cased_Letter". En realidad, son "Letter_Number".) Este conjunto
también incluye sus subconjuntos "PosixUpper" y "PosixLower", los cuales en "/ i" coinciden
"PosixAlpha".
Para obtener más detalles sobre las propiedades Unicode, consulte "Propiedades de caracteres Unicode" en perlunicode;
para obtener una lista completa de posibles propiedades, consulte "Propiedades accesibles a través de \ p {} y
\ P {} "en perluniprops, que señala todas las formas que tienen diferencias" / i ". También es
posible definir sus propias propiedades. Esto se trata en "Carácter definido por el usuario
Propiedades "en perlunicode.
Las propiedades Unicode se definen (¡sorpresa!) Solo en puntos de código Unicode. Empezando en
v5.20, cuando se compara con "\ p" y "\ P", Perl trata los puntos de código que no son Unicode (aquellos
por encima del máximo legal de Unicode de 0x10FFFF) como si fueran Unicode típico no asignado
puntos de código
Antes de la v5.20, Perl emitió una advertencia e hizo que todas las coincidencias fallaran en el código que no era Unicode
puntos. Esto podría resultar algo sorprendente:
chr(0x110000) = ~ \ p {ASCII_Hex_Digit = True} # Falla en Perls <v5.20.
chr(0x110000) = ~ \ p {ASCII_Hex_Digit = False} # También falla en Perls
# <v5.20
Aunque estas dos coincidencias pueden considerarse complementos, hasta la v5.20 eran tan
solo en puntos de código Unicode.
Ejemplos
"a" = ~ / \ w / # Match, "a" es un carácter de 'palabra'.
"7" = ~ / \ w / # Match, "7" también es un carácter de 'palabra'.
"a" = ~ / \ d / # No coincide, "a" no es un dígito.
"7" = ~ / \ d / # Coincidencia, "7" es un dígito.
"" = ~ / \ s / # Match, un espacio es un espacio en blanco.
"a" = ~ / \ D / # Match, "a" no es un dígito.
"7" = ~ / \ D / # No coincide, "7" no es un dígito.
"" = ~ / \ S / # No coincide, un espacio no es un espacio en blanco.
"" = ~ / \ h / # Match, el espacio es un espacio en blanco horizontal.
"" = ~ / \ v / # No coincide, el espacio no es un espacio en blanco vertical.
"\ r" = ~ / \ v / # Match, un retorno es un espacio en blanco vertical.
"a" = ~ / \ pL / # Match, "a" es una letra.
"a" = ~ / \ p {Lu} / # No coincide, / \ p {Lu} / coincide con letras mayúsculas.
"\ x {0e0b}" = ~ / \ p {Thai} / # Match, \ x {0e0b} es el carácter
# 'CARÁCTER TAILANDÉS TAN TAN', y eso está en
# Clase tailandesa Unicode.
"a" = ~ / \ P {Lao} / # Match, ya que "a" no es un carácter laosiano.
Vale la pena enfatizar que "\ d", "\ w", etc., coinciden con caracteres individuales, no completos
números o palabras. Para hacer coincidir un número (que consta de dígitos), use "\ d +"; para hacer coincidir una palabra,
utilice "\ w +". Pero tenga en cuenta las consideraciones de seguridad al hacerlo, como se mencionó anteriormente.
Entre corchetes Caracter Clases
La tercera forma de clase de caracteres que puede utilizar en las expresiones regulares de Perl es la
clase de personaje. En su forma más simple, enumera los caracteres que pueden coincidir,
rodeado de corchetes, así: "[aeiou]". Esto coincide con uno de "a", "e", "i",
"o" o "u". Al igual que las otras clases de caracteres, se hace coincidir exactamente un carácter. * Para coincidir
una cadena más larga que consta de los caracteres mencionados en la clase de caracteres, siga las
clase de caracteres con un cuantificador. Por ejemplo, "[aeiou] +" coincide con una o más minúsculas
Vocales inglesas.
La repetición de un personaje en una clase de personaje no tiene ningún efecto; se considera que está en el set
sólo una vez.
Ejemplos:
"e" = ~ / [aeiou] / # Match, ya que "e" aparece en la clase.
"p" = ~ / [aeiou] / # No coincide, "p" no aparece en la clase.
"ae" = ~ / ^ [aeiou] $ / # No coincide, una clase de personaje solo coincide
# un solo carácter.
"ae" = ~ / ^ [aeiou] + $ / # Coincidencia, debido al cuantificador.
-------
* Hay dos excepciones para una clase de carácter entre corchetes que coincida con un solo carácter
solamente. Cada uno requiere un manejo especial por parte de Perl para que todo funcione:
· Cuando la clase debe coincidir sin mayúsculas bajo las reglas de coincidencia "/ i", y un carácter que
se menciona explícitamente dentro de la clase coincide con una secuencia de varios caracteres
sin caso bajo las reglas Unicode, la clase también coincidirá con esa secuencia. Por ejemplo,
Unicode dice que la letra "LETRA LATINA MINÚSCULA S AFILADA" debe coincidir con la secuencia
"ss" bajo las reglas "/ i". Por lo tanto,
'ss' = ~ / \ A \ N {LETRA MINÚSCULA LATINA AFILADA S} \ z / i # Coincidencias
'ss' = ~ / \ A [aeioust \ N {LATINA MINÚSCULA AFILADA S}] \ z / i # Coincidencias
Para que esto suceda, la clase no debe invertirse (ver "Negación") y el carácter
debe especificarse explícitamente y no ser parte de un rango de varios caracteres (ni siquiera como
uno de sus puntos finales). (Los "rangos de caracteres" se explicarán en breve).
'ss' = ~ / \ A [\ 0- \ x {ff}] \ z / ui # No coincide
'ss' = ~ / \ A [\ 0- \ N {LETRA MINÚSCULA LATINA SUDADA S}] \ z / ui # No coincide
'ss' = ~ / \ A [\ xDF- \ xDF] \ z / ui # Coincide con plataformas ASCII, ya que
# \ xDF es LETRA MINÚSCULA LATINA S AFILADA,
# y el rango es solo un
# elemento
Tenga en cuenta que no es una buena idea especificar este tipo de rangos de todos modos.
· Algunos nombres conocidos como "\ N {...}" se refieren a una secuencia de varios caracteres, en lugar de
el carácter único habitual. Cuando uno de estos está incluido en la clase, todo el
la secuencia coincide. Por ejemplo,
"\ N {TAMIL LETRA KA} \ N {TAMIL VOWEL SIGN AU}"
= ~ / ^ [\ N {TAMIL SÍLABA KAU}] $ / x;
coincidencias, porque "\ N {TAMIL SYLLABLE KAU}" es una secuencia con nombre que consta de dos
caracteres contrastados. Como la otra instancia donde una clase entre corchetes puede coincidir
varios caracteres, y por razones similares, la clase no debe invertirse, y la
Es posible que la secuencia con nombre no aparezca en un rango, incluso en uno en el que son ambos extremos. Si
estos suceden, es un error fatal si la clase de caracteres está dentro de un extendido
"(?[...])" clase; y solo se utiliza el primer punto de código (con una advertencia de tipo "regexp"
elevado) de lo contrario.
Especial Personajes Inside a Entre corchetes Caracter Clase
La mayoría de los caracteres que son metacaracteres en expresiones regulares (es decir, caracteres que
tienen un significado especial como ".", "*" o "(") pierden su significado especial y se pueden usar
dentro de una clase de personaje sin la necesidad de escapar de ellos. Por ejemplo, "[()]" coincide
ya sea un paréntesis de apertura o un paréntesis de cierre, y los paréntesis dentro del
la clase de personaje no agrupa ni captura.
Los caracteres que pueden tener un significado especial dentro de una clase de caracteres son: "\", "^", "-",
"[" y "]", y se analizan a continuación. Se pueden escapar con una barra invertida, aunque esto
a veces no es necesario, en cuyo caso se puede omitir la barra invertida.
La secuencia "\ b" es especial dentro de una clase de caracteres entre corchetes. Mientras que fuera del
clase de carácter, "\ b" es una aserción que indica un punto que no tiene dos
caracteres de palabra o dos caracteres que no son de palabra a cada lado, dentro de un carácter entre corchetes
class, "\ b" coincide con un carácter de retroceso.
Las secuencias "\ a", "\ c", "\ e", "\ f", "\ n", "\ N {NOMBRE}", "\ N {U +hexagonal carbonizarse}", "\ r", "\ t" y
"\ x" también son especiales y tienen el mismo significado que tienen fuera de un carácter entre corchetes
clase.
Además, una barra invertida seguida de dos o tres dígitos octales se considera un número octal.
Un "[" no es especial dentro de una clase de carácter, a menos que sea el comienzo de un carácter POSIX
class (consulte "Clases de caracteres POSIX" a continuación). Normalmente no necesita escapar.
Un "]" es normalmente el final de una clase de caracteres POSIX (consulte "Clases de caracteres POSIX"
a continuación), o señala el final de la clase de caracteres entre corchetes. Si desea incluir un
"]" en el conjunto de caracteres, generalmente debe escapar de él.
Sin embargo, si "]" es el first (o el segundo si el primer carácter es un signo de intercalación)
carácter de una clase de caracteres entre corchetes, no denota el final de la clase (como
no puede tener una clase vacía) y se considera parte del conjunto de caracteres que se pueden
emparejado sin escapar.
Ejemplos:
"+" = ~ / [+? *] / # Match, "+" en una clase de personaje no es especial.
"\ cH" = ~ / [\ b] / # Match, \ b dentro de una clase de carácter
# es equivalente a un retroceso.
"]" = ~ / [] [] / # Coincidencia, ya que la clase de carácter contiene
# ambos y ].
"[]" = ~ / [[]] / # Coincidencia, el patrón contiene una clase de carácter
# que contiene solo [, y la clase de carácter es
# seguido de una].
Caracter Ranges
No es raro querer hacer coincidir una variedad de caracteres. Afortunadamente, en lugar de enumerar todos
caracteres en el rango, se puede usar el guión ("-"). Si está dentro de un carácter entre corchetes
clase tiene dos caracteres separados por un guion, se trata como si todos los caracteres
entre los dos estaban en la clase. Por ejemplo, "[0-9]" coincide con cualquier dígito ASCII y
"[am]" coincide con cualquier letra minúscula de la primera mitad del alfabeto ASCII.
Tenga en cuenta que los dos caracteres a cada lado del guión no son necesariamente ambas letras
o ambos dígitos. Cualquier personaje es posible, aunque no recomendable. "['-?]" contiene una
variedad de caracteres, pero la mayoría de la gente no sabrá qué caracteres significa eso.
Además, tales rangos pueden dar lugar a problemas de portabilidad si el código tiene que ejecutarse en un
plataforma que utiliza un conjunto de caracteres diferente, como EBCDIC.
Si un guión en una clase de caracteres no puede formar parte sintácticamente de un rango, por ejemplo
porque es el primer o el último carácter de la clase de caracteres, o si inmediatamente
sigue un rango, el guión no es especial y, por lo tanto, se considera un carácter que debe coincidir
literalmente. Si desea que un guión en su conjunto de caracteres coincida y su posición
en la clase es tal que podría considerarse parte de un rango, debe escapar de que
guión con barra invertida.
Ejemplos:
[az] # Coincide con un carácter que es una letra ASCII minúscula.
[a-fz] # Coincide con cualquier letra entre 'a' y 'f' (inclusive) o
# la letra 'z'.
[-z] # Coincide con un guión ('-') o la letra 'z'.
[afm] # Coincide con cualquier letra entre 'a' y 'f' (inclusive), la
# guión ('-'), o la letra 'm'.
['-?] # Coincide con cualquiera de los caracteres' () * +, -. / 0123456789:; <=>?
# (Pero no en una plataforma EBCDIC).
[\ N {APÓSTROFE} - \ N {SIGNO DE PREGUNTA}]
# Coincide con cualquiera de los caracteres '() * +, -. / 0123456789:; <=>?
# incluso en una plataforma EBCDIC.
[\ N {U + 27} - \ N {U + 3F}] # Igual. (U + 27 es "'" y U + 3F es "?")
Como muestran los dos ejemplos finales anteriores, puede lograr la portabilidad a plataformas que no sean ASCII si
utilizando el formulario "\ N {...}" para los extremos del rango. Estos indican que el rango especificado
debe interpretarse utilizando valores Unicode, por lo que "[\ N {U + 27} - \ N {U + 3F}]" significa coincidir
"\ N {U + 27}", "\ N {U + 28}", "\ N {U + 29}", ..., "\ N {U + 3D}", "\ N {U + 3E} "y" \ N {U + 3F} ", lo que sea
las versiones de puntos de código nativos para esos son. Estos se denominan rangos "Unicode". Si
cualquiera de los extremos tiene el formato "\ N {...}", el rango se considera Unicode. Una advertencia "regexp"
se genera en "use re 'estricto'" si el otro extremo se especifica de forma no portátil:
[\ N {U + 00} - \ x09] # Advertencia bajo re 'estricto'; \ x09 no es portátil
[\ N {U + 00} - \ t] # Sin advertencia;
Ambos de los anteriores coinciden con los caracteres "\ N {U + 00}" "\ N {U + 01}", ... "\ N {U + 08}", "\ N {U + 09}",
pero el "\ x09" parece que podría ser un error, por lo que se genera la advertencia (debajo de "re
'estricto' ") para ello.
Perl también garantiza que los rangos "AZ", "az", "0-9" y cualquier subrango de estos coincidan
lo que un hablante de solo inglés esperaría que igualen en cualquier plataforma. Es decir, "[AZ]"
coincide con las 26 letras mayúsculas ASCII; "[az]" coincide con las 26 letras minúsculas; y
"[0-9]" coincide con los 10 dígitos. Los subrangos, como "[hk]", coinciden en consecuencia, en este
caso solo las cuatro letras "h", "i", "j" y "k". Este es el comportamiento natural en ASCII
plataformas donde los puntos de código (valores ordinales) de "h" a "k" son consecutivos
enteros (0x68 a 0x6B). Pero puede ser necesario un manejo especial para lograr esto en
plataformas con un juego de caracteres nativo no ASCII. Por ejemplo, en plataformas EBCDIC, el
el punto de código para "h" es 0x88, "i" es 0x89, "j" es 0x91 y "k" es 0x92. Perl especialmente
trata "[hk]" para excluir los siete puntos de código en el espacio: 0x8A a 0x90. Esta
el manejo especial solo se invoca cuando el rango es un subrango de uno de los ASCII
rangos de mayúsculas, minúsculas y dígitos, Y cada extremo del rango se expresa como un
literal, como "A", o como un carácter con nombre ("\ N {...}", incluida la forma "\ N {U + ...").
Ejemplos de EBCDIC:
[ij] # Coincide con "i" o "j"
[i- \ N {LETRA J MINÚSCULA LATINA}] # Igual
[i- \ N {U + 6A}] # Igual
[\ N {U + 69} - \ N {U + 6A}] # Igual
[\ x {89} - \ x {91}] # Coincide con 0x89 ("i"), 0x8A .. 0x90, 0x91 ("j")
[i- \ x {91}] # Igual
[\ x {89} -j] # Igual
[iJ] # Coincidencias, 0x89 ("i") .. 0xC1 ("J"); especial
# manejo no se aplica porque el rango es mixto
# caso
la Negación
En su lugar, también es posible enumerar los caracteres que no desea hacer coincidir. Puedes hacerlo
utilizando un signo de intercalación ("^") como primer carácter de la clase de caracteres. Por ejemplo,
"[^ az]" coincide con cualquier carácter que no sea una letra ASCII minúscula, por lo que
incluye más de un millón de puntos de código Unicode. Se dice que la clase está "negada" o
"invertido".
Esta sintaxis hace que el signo de intercalación sea un carácter especial dentro de una clase de caracteres entre corchetes, pero
solo si es el primer carácter de la clase. Entonces, si desea que el signo de intercalación sea uno de los
caracteres para que coincidan, o escape del símbolo de intercalación o no lo enumere primero.
En las clases de caracteres entre corchetes invertidos, Perl ignora las reglas Unicode que normalmente dicen
esa secuencia nombrada, y ciertos caracteres deben coincidir con una secuencia de varios caracteres
utilizar bajo coincidencia sin mayúsculas y minúsculas "/ i". Seguir esas reglas puede llevar a situaciones muy confusas.
situaciones:
"ss" = ~ / ^ [^ \ xDF] + $ / ui; # ¡Partidos!
Debe coincidir con cualquier secuencia de caracteres que no sea "\ xDF" ni con "\ xDF"
debajo de "/ i". "s" no es "\ xDF", pero Unicode dice que "ss" es lo que "\ xDF" coincide con
"/I". Entonces, ¿cuál "gana"? ¿Falla la coincidencia porque la cadena tiene "ss" o la acepta?
porque tiene una "s" seguida de otra "s"? Perl ha elegido este último. (Ver nota en
"Clases de caracteres entre corchetes" arriba).
Ejemplos:
"e" = ~ / [^ aeiou] / # No coincide, aparece la 'e'.
"x" = ~ / [^ aeiou] / # Coincide, ya que 'x' no es una vocal en minúscula.
"^" = ~ / [^^] / # No coincide, coincide con cualquier cosa que no sea un signo de intercalación.
"^" = ~ / [x ^] / # Match, el intercalado no es especial aquí.
Barra invertida Secuencias
Puede poner cualquier clase de carácter de secuencia de barra invertida (con la excepción de "\ N" y "\ R")
dentro de una clase de caracteres entre corchetes, y actuará como si hubiera puesto todos los caracteres
coincide con la secuencia de barra invertida dentro de la clase de carácter. Por ejemplo, "[af \ d]"
coincide con cualquier dígito decimal o con cualquiera de las letras minúsculas entre 'a' y 'f' inclusive.
"\ N" dentro de una clase de caracteres entre corchetes debe tener el formato "\ N {nombre}" o "\ N {U +hexagonal
carbonizarse}", y NO ser el formulario que coincida con líneas no nuevas, por la misma razón que un punto "."
dentro de una clase de caracteres entre corchetes pierde su significado especial: coincide con casi cualquier cosa,
que generalmente no es lo que quieres que suceda.
Ejemplos:
/ [\ p {Thai} \ d] / # Coincide con un carácter que sea tailandés
# carácter o un dígito.
/ [^ \ p {árabe} ()] / # Coincide con un carácter que no es árabe
# carácter, ni paréntesis.
Las clases de caracteres de secuencia de barra invertida no pueden formar uno de los puntos finales de un rango. Por lo tanto,
no puedes decir:
/ [\ p {tailandés} - \ d] / # ¡Incorrecto!
POSIX Caracter Clases
Las clases de caracteres POSIX tienen la forma "[: clase:]", donde clase es el nombre y el "[:"
y delimitadores ":]". Las clases de caracteres POSIX solo aparecen interior carácter entre corchetes
clases, y son una forma conveniente y descriptiva de enumerar un grupo de caracteres.
Tenga cuidado con la sintaxis,
# Correcto:
$ cadena = ~ / [[: alpha:]] /
# Incorrecto (advertirá):
$ cadena = ~ / [: alpha:] /
El último patrón sería una clase de caracteres formada por dos puntos y las letras "a",
"l", "p" y "h".
Las clases de caracteres POSIX pueden formar parte de una clase de caracteres entre corchetes más grande. Por ejemplo,
[01 [: alpha:]%]
es válido y coincide con '0', '1', cualquier carácter alfabético y el signo de porcentaje.
Perl reconoce las siguientes clases de caracteres POSIX:
alpha Cualquier carácter alfabético ("[A-Za-z]").
alnum Cualquier carácter alfanumérico ("[A-Za-z0-9]").
ascii Cualquier carácter del juego de caracteres ASCII.
blank Una extensión GNU, igual a un espacio o una pestaña horizontal ("\ t").
cntrl Cualquier carácter de control. Consulte la Nota [2] a continuación.
dígito Cualquier dígito decimal ("[0-9]"), equivalente a "\ d".
gráfico Cualquier carácter imprimible, excluyendo un espacio. Consulte la Nota [3] a continuación.
minúscula Cualquier carácter en minúscula ("[az]").
imprimir Cualquier carácter imprimible, incluido un espacio. Consulte la Nota [4] a continuación.
puntuar Cualquier carácter gráfico que excluya los caracteres de "palabra". Nota [5].
espacio Cualquier carácter de espacio en blanco. "\ s" incluida la pestaña vertical
("\ cK").
superior Cualquier carácter en mayúscula ("[AZ]").
palabra Una extensión de Perl ("[A-Za-z0-9_]"), equivalente a "\ w".
xdigit Cualquier dígito hexadecimal ("[0-9a-fA-F]").
Al igual que las propiedades Unicode, la mayoría de las propiedades POSIX coinciden independientemente de
si la coincidencia que no distingue entre mayúsculas y minúsculas ("/ i") está en vigor o no. Las dos excepciones son
"[:Superior e inferior:]". Debajo de "/ i", cada uno coincide con la unión de "[: upper:]" y
"[:más bajo:]".
La mayoría de las clases de caracteres POSIX tienen dos contrapartes de propiedad "\ p" de estilo Unicode. (Son
no propiedades oficiales de Unicode, sino extensiones de Perl derivadas de Unicode oficial
propiedades.) La tabla siguiente muestra la relación entre las clases de caracteres POSIX y estas
homólogos.
Una contraparte, en la columna etiquetada "Unicode de rango ASCII" en la tabla, solo coincide
caracteres en el juego de caracteres ASCII.
La otra contraparte, en la columna denominada "Unicode de rango completo", coincide con cualquier
caracteres apropiados en el conjunto completo de caracteres Unicode. Por ejemplo, "\ p {Alpha}"
coincide no solo con los caracteres alfabéticos ASCII, sino con cualquier carácter de todo Unicode
el conjunto de caracteres se considera alfabético. Una entrada en la columna denominada "secuencia de barra invertida"
es un equivalente (corto).
[[: ...:]] Rango ASCII Barra invertida de rango completo Nota
Secuencia Unicode Unicode
-------------------------------------------------- ---
alpha \ p {PosixAlpha} \ p {XPosixAlpha}
alnum \ p {PosixAlnum} \ p {XPosixAlnum}
ascii \ p {ASCII}
en blanco \ p {PosixBlank} \ p {XPosixBlank} \ h [1]
o \ p {HorizSpace} [1]
cntrl \ p {PosixCntrl} \ p {XPosixCntrl} [2]
dígito \ p {PosixDigit} \ p {XPosixDigit} \ d
gráfico \ p {PosixGraph} \ p {XPosixGraph} [3]
inferior \ p {PosixLower} \ p {XPosixLower}
imprimir \ p {PosixPrint} \ p {XPosixPrint} [4]
punct \ p {PosixPunct} \ p {XPosixPunct} [5]
\ p {PerlSpace} \ p {XPerlSpace} \ s [6]
espacio \ p {PosixSpace} \ p {XPosixSpace} [6]
superior \ p {PosixUpper} \ p {XPosixUpper}
palabra \ p {PosixWord} \ p {XPosixWord} \ w
xdigit \ p {PosixXDigit} \ p {XPosixXDigit}
[1] "\ p {Blank}" y "\ p {HorizSpace}" son sinónimos.
[2] Los caracteres de control no producen una salida como tal, sino que generalmente controlan la
terminal de alguna manera: por ejemplo, nueva línea y retroceso son caracteres de control. En ASCII
plataformas, en el rango ASCII, caracteres cuyos puntos de código están entre 0 y 31
inclusive, más 127 ("DEL") son caracteres de control; en plataformas EBCDIC, su
las contrapartes son personajes de control.
[3] Cualquier personaje que sea gráfico, es decir, visible. Esta clase consta de todos
caracteres alfanuméricos y todos los caracteres de puntuación.
[4] Todos los caracteres imprimibles, que es el conjunto de todos los caracteres gráficos más los
caracteres de espacio en blanco que no son también controles.
[5] "\ p {PosixPunct}" y "[[: punct:]]" en el rango ASCII coinciden con todos los no controles, no
caracteres alfanuméricos que no son espacios: "[-!" # $% & '() * +,. / :; <=>? @ [\\\] ^ _ `{|} ~]" (aunque
si una configuración regional está en vigor, podría alterar el comportamiento de "[[: punct:]]").
La propiedad de nombre similar, "\ p {Punct}", coincide con un conjunto algo diferente en el
Rango ASCII, es decir, "[-!" #% & '() *,. /:;? @ [\\\] _ {}] ". Es decir, falta el nueve
caracteres "[$ + <=> ^` | ~] ". Esto se debe a que Unicode divide lo que POSIX considera
puntuación en dos categorías, puntuación y símbolos.
"\ p {XPosixPunct}" y (bajo las reglas Unicode) "[[: punct:]]", coinciden con "\ p {PosixPunct}"
coincidencias en el rango ASCII, más lo que coincide con "\ p {Punct}". Esto es diferente a
estrictamente coincidente de acuerdo con "\ p {Punct}". Otra forma de decirlo es que si Unicode
las reglas están en vigor, "[[: punct:]]" coincide con todos los caracteres que Unicode considera
puntuación, más todos los caracteres del rango ASCII que Unicode considera símbolos.
[6] "\ p {XPerlSpace}" y "\ p {Space}" coinciden de forma idéntica a partir de Perl v5.18. En
versiones anteriores, estas difieren solo en que en la coincidencia sin configuración regional, "\ p {XPerlSpace}"
no coincide con la pestaña vertical, "\ cK". Lo mismo para las dos formas de rango solo ASCII.
Hay varios otros sinónimos que se pueden utilizar además de los nombres enumerados en la tabla.
Por ejemplo, "\ p {PosixAlpha}" se puede escribir como "\ p {Alpha}". Todos están listados en
"Propiedades accesibles a través de \ p {} y \ P {}" en perluniprops.
Ambas contrapartes "\ p" siempre asumen que las reglas Unicode están en vigor. En plataformas ASCII,
esto significa que asumen que los puntos de código de 128 a 255 son Latin-1, y eso significa
que usarlos bajo las reglas de configuración regional es imprudente a menos que se garantice que la configuración regional es Latin-1
o UTF-8. Por el contrario, las clases de caracteres POSIX son útiles bajo las reglas de configuración regional. Ellos
se ven afectados por las reglas vigentes, de la siguiente manera:
Si el modificador "/ a" está en efecto ...
Cada una de las clases POSIX coincide exactamente con sus contrapartes del rango ASCII.
de lo contrario ...
Para puntos de código por encima de 255 ...
La clase POSIX coincide con la misma que su contraparte de rango completo.
Para puntos de código por debajo de 256 ...
si las reglas de configuración regional están en vigor ...
La clase POSIX coincide con la configuración regional, excepto:
"palabra"
también incluye el carácter de subrayado nativo de la plataforma, sin importar qué
la localidad es.
"ascii"
en plataformas que no tienen la extensión POSIX "ascii", esto coincide
solo los caracteres nativos del rango ASCII de la plataforma.
"blanco"
en plataformas que no tienen la extensión POSIX "en blanco", esto coincide
solo los caracteres de tabulación y espacio nativos de la plataforma.
si las reglas Unicode están en vigor ...
La clase POSIX coincide con la contraparte de rango completo.
de lo contrario ...
La clase POSIX coincide con la contraparte del rango ASCII.
Las reglas que se aplican se determinan como se describe en "¿Qué modificador de juego de caracteres está en
efecto? "en perlre.
Se propone cambiar este comportamiento en una versión futura de Perl para que tanto si
Las reglas Unicode están en efecto no cambiarían el comportamiento: Fuera de la configuración regional, el POSIX
las clases se comportarían como sus contrapartes del rango ASCII. Si desea comentar sobre esto
propuesta, envíe un correo electrónico a "[email protected]".
Negación de clases de caracteres POSIX
Una extensión de Perl a la clase de caracteres POSIX es la capacidad de negarla. Esto es hecho por
prefijar el nombre de la clase con un signo de intercalación ("^"). Algunos ejemplos:
POSIX ASCII-range Barra invertida de rango completo
Secuencia Unicode Unicode
-------------------------------------------------- ---
[[: ^ dígito:]] \ P {PosixDigit} \ P {XPosixDigit} \ D
[[: ^ espacio:]] \ P {PosixSpace} \ P {XPosixSpace}
\ P {PerlSpace} \ P {XPerlSpace} \ S
[[: ^ palabra:]] \ P {PerlWord} \ P {XPosixWord} \ W
La secuencia de barra invertida puede significar ASCII o Unicode de rango completo, dependiendo de varios
factores como se describe en "¿Qué modificador de juego de caracteres está en efecto?" en perlre.
[= =] y [. .]
Perl reconoce las clases de caracteres POSIX "[= class =]" y "[.class.]", Pero no
(¿todavía?) apoyarlos. Cualquier intento de utilizar cualquiera de las construcciones genera una excepción.
Ejemplos
/ [[: dígito:]] / # Coincide con un carácter que es un dígito.
/ [01 [: lower:]] / # Coincide con un carácter que sea un
# letra minúscula, o '0' o '1'.
/ [[: digit:] [: ^ xdigit:]] / # Coincide con un carácter que puede ser cualquier cosa
# excepto las letras 'a' a 'f' y 'A' a
# 'F'. Esto se debe a que el personaje principal
# la clase se compone de dos caracteres POSIX
# clases que están juntas en OR, una que
# coincide con cualquier dígito, y el otro que
# coincide con cualquier cosa que no sea un dígito hexadecimal.
# El OR suma los dígitos, dejando solo el
# Se excluyen las letras de la 'a' a la 'f' y de la 'A' a la 'F'.
extendido Entre corchetes Caracter Clases
Esta es una elegante clase de caracteres entre corchetes que se puede utilizar para obtener más legibilidad y menos
clases propensas a errores y para realizar operaciones de conjuntos, como intersección. Un ejemplo es
/ (? [\ p {tailandés} & \ p {dígito}]) /
Esto coincidirá con todos los caracteres de dígitos que están en la escritura tailandesa.
Esta es una función experimental disponible a partir de la versión 5.18 y está sujeta a cambios a medida que
ganar experiencia de campo con él. Cualquier intento de usarlo generará una advertencia, a menos que
inhabilitado a través de
sin advertencias "experimental :: regex_sets";
Los comentarios sobre esta función son bienvenidos; Enviar el email a "[email protected]".
Podemos ampliar el ejemplo anterior:
/ (? [(\ p {tailandés} + \ p {lao}) & \ p {dígito}]) /
Esto coincide con los dígitos que están en la escritura tailandesa o laosiana.
Observe el espacio en blanco en estos ejemplos. Esta construcción siempre tiene el modificador "/ x"
encendido dentro de él.
Los operadores binarios disponibles son:
& intersección
+ unión
| otro nombre para '+', por lo tanto significa unión
- resta (el resultado coincide con el conjunto que consta de los
puntos de código coincidentes con el primer operando, excluyendo cualquiera que
también coinciden con el segundo operando)
^ diferencia simétrica (la unión menos la intersección). Esta
es como un exclusivo o, en el sentido de que el resultado es el conjunto de código
puntos que coinciden con cualquiera, pero no ambos, de los
operandos.
Hay un operador unario:
! complemento
Todos los operadores binarios dejaron asociados; "&" tiene mayor precedencia que los demás, que
todos tienen igual precedencia. El derecho de operador unario se asocia, y tiene el mayor
precedencia. Por lo tanto, esto sigue las reglas de precedencia normales de Perl para operadores lógicos.
Utilice paréntesis para anular la precedencia y la asociatividad predeterminadas.
La principal restricción es que todo es un meta personaje. Por lo tanto, no puede referirse a
caracteres individuales haciendo algo como esto:
/ (? [a + b]) / # ¡Error de sintaxis!
La forma más sencilla de especificar un carácter individual que se puede escribir es encerrarlo entre corchetes:
/ (? [[a] + [b]]) /
(Esto es lo mismo que "[ab]".) También podría haber dicho el equivalente:
/ (? [[ab]]) /
(Por supuesto, puede especificar caracteres individuales usando, "\ x {...}", "\ N {...}", etc.)
Este último ejemplo muestra el uso de esta construcción para especificar un ordinario entre corchetes
clase de carácter sin operaciones de conjunto adicionales. Tenga en cuenta el espacio en blanco dentro de él; "/X"
está activado incluso dentro de las clases de caracteres entre corchetes, excepto que no puede tener comentarios
dentro de ellos. Por eso,
(? [[#]])
coincide con el carácter literal "#". Para especificar un carácter de espacio en blanco literal, puede
escapar de él con una barra invertida, como:
/ (? [[aeiou \]]) /
Esto coincide con las vocales en inglés más el carácter de ESPACIO. Todas las otras fugas aceptadas
por clases de caracteres normales entre corchetes también se aceptan aquí; pero escapes no reconocidos
que generan advertencias en clases normales son errores fatales aquí.
Todas las advertencias de estos elementos de clase son fatales, así como algunas prácticas que no
advierto actualmente. Por ejemplo, no puedes decir
/ (? [[\ xF]]) / # ¡Error de sintaxis!
Debes tener dos dígitos hexadecimales después de una "\ x" sin llaves (usa un cero a la izquierda para hacer dos).
Estas restricciones tienen como objetivo reducir la incidencia de errores tipográficos que hacen que la clase no coincida con lo que
pensaste que lo haría.
Si una clase de carácter regular entre corchetes contiene "\ p {}" o "\ P {}" y se compara con
un punto de código que no es Unicode, se puede generar una advertencia, ya que el resultado no está definido por Unicode.
No se producirá ninguna advertencia de este tipo al utilizar este formulario ampliado.
La diferencia final entre las clases de caracteres regulares entre corchetes y estos, es que es
No es posible hacer que estos coincidan con un pliegue de varios caracteres. Por lo tanto,
/ (? [[\ xDF]]) / iu
no coincide con la cadena "ss".
No tiene que encerrar los nombres de clase POSIX entre corchetes dobles, por lo tanto, ambos
siguiente trabajo:
/ (? [[: palabra:] - [: inferior:]]) /
/ (? [[[: palabra:]] - [[: inferior:]]]) /
Cualquier clase de caracteres POSIX contenida, incluidas cosas como "\ w" y "\ D", respetan el
Modificadores "/ a" (y "/ aa").
"(? [])" es una construcción en tiempo de compilación de expresiones regulares. Cualquier intento de usar algo que no sea
conocible en el momento en que se compila la expresión regular que la contiene es un error fatal. En
práctica, esto significa solo tres limitaciones:
1. Esta construcción no se puede utilizar dentro del alcance de "use locale" (o la expresión regular "/ l"
modificador).
2. Cualquier propiedad definida por el usuario que se utilice debe estar ya definida para el momento en que
se compila la expresin (pero tenga en cuenta que esta construccin se puede utilizar en lugar de
propiedades).
3. Una expresión regular que, de lo contrario, se compilaría con las reglas "/ d" y que usa
esta construcción usará en su lugar "/ u". Por lo tanto, esta construcción le dice a Perl que no
desea reglas "/ d" para toda la expresión regular que lo contiene.
Tenga en cuenta que omitir los espacios en blanco se aplica solo al interior de esta construcción. Debería
no debe haber ningún espacio entre ninguno de los caracteres que forman la inicial "(? [". Tampoco puede haber
debe haber espacio entre los caracteres de cierre "])".
Al igual que en todas las expresiones regulares, el patrón se puede construir incluyendo variables
que se interpolan en el momento de la compilación de expresiones regulares. Se debe tener cuidado para asegurarse de que
están obteniendo lo que esperas. Por ejemplo:
my $ thai_or_lao = '\ p {tailandés} + \ p {Lao}';
...
qr / (? [\ p {Dígito} & $ thai_or_lao]) /;
compila a
qr / (? [\ p {Dígito} & \ p {Tailandés} + \ p {Lao}]) /;
Pero esto no tiene el efecto que probablemente esperaría alguien que lea el código, ya que
la intersección se aplica solo a "\ p {tailandés}", excluyendo el laosiano. Trampas como esta
se puede evitar poniendo entre paréntesis las piezas del componente:
my $ thai_or_lao = '(\ p {tailandés} + \ p {lao})';
Pero los modificadores se seguirán aplicando a todos los componentes:
my $ lower = '\ p {Lower} + \ p {Digit}';
qr / (? [\ p {griego} & $ inferior]) / i;
coincide con cosas en mayúsculas. Puede evitar sorpresas convirtiendo los componentes en
instancias de esta construcción compilándolas:
my $ thai_or_lao = qr / (? [\ p {tailandés} + \ p {Lao}]) /;
my $ menor = qr / (? [\ p {Inferior} + \ p {Dígito}]) /;
Cuando estos están incrustados en otro patrón, lo que coinciden no cambia, independientemente de
entre paréntesis o qué modificadores están en efecto en ese patrón externo.
Debido a la forma en que Perl analiza las cosas, es posible que sus paréntesis y corchetes deban ser
equilibrado, incluso incluyendo comentarios. Si encuentra algún ejemplo, envíelo a
"[email protected]", para que podamos tener un ejemplo concreto para esta página de manual.
Podemos cambiarlo para que las cosas que sigan siendo usos legales en caracteres normales entre corchetes
las clases pueden volverse ilegales dentro de esta construcción experimental. Una propuesta, para
ejemplo, es prohibir usos adyacentes del mismo carácter, como en "(? [[aa]])". los
La motivación para tal cambio es que este uso es probablemente un error tipográfico, ya que la segunda "a" agrega
nada.
Use perlrecharclass en línea usando los servicios de onworks.net