Clases de caracteres
Un corchete de apertura introduce una clase de caracteres,
terminada por un corchete de cierre. Un corchete de cierre por sí solo no es especial. Si se requiere un corchete de cierre como miembro de la clase, debe ser
el primer carácter de datos en la clase (después de un circunflejo inicial, si está presente) o escapado con una barra invertida.
Una clase de caracteres coincide con un solo carácter en el sujeto;
el carácter debe estar en el conjunto de caracteres definido por
la clase, a menos que el primer carácter en la clase sea un
circunflejo, en cuyo caso el carácter del sujeto no debe estar en
el conjunto definido por la clase. Si se requiere un circunflejo como
miembro de la clase, asegúrese de que no sea el
primer carácter, o escápelo con una barra invertida.
Por ejemplo, la clase de caracteres [aeiou] coincide con cualquier vocal minúscula, mientras que [^aeiou] coincide con cualquier carácter que no sea
una vocal minúscula. Tenga en cuenta que un circunflejo es solo una
notación conveniente para especificar los caracteres que están en
la clase enumerando aquellos que no están. No es una
afirmación: aún consume un carácter de la cadena de sujeto,
y falla si el puntero actual está al final
de la cadena.
Cuando se establece la coincidencia sin distinción de mayúsculas y minúsculas, cualquier letra
en una clase representa tanto su versión mayúscula como minúscula,
por lo que, por ejemplo, una [aeiou] insensible coincide con "A"
así como con "a", y una [^aeiou] insensible no coincide
con "A", mientras que una versión sensible (con distinción de mayúsculas y minúsculas) sí.
El carácter de nueva línea nunca se trata de manera especial en
clases de caracteres, independientemente de la configuración de las opciones PCRE_DOTALL
o PCRE_MULTILINE. Una clase como [^a] siempre coincide con una nueva línea.
El carácter de guión puede usarse para especificar un rango
de caracteres en una clase de caracteres. Por ejemplo, [d-m]
coincide con cualquier letra entre d y m, inclusive. Si se requiere un carácter de guión en una clase, debe escaparse con una
barra invertida o aparecer en una posición donde no pueda
interpretarse como indicación de un rango, típicamente como el primer o último
carácter en la clase.
No es posible tener el carácter literal "]" como el
carácter final de un rango. Un patrón como [W-]46] es
interpretado como una clase de dos caracteres ("W" y "-")
seguido de una cadena literal "46]", por lo que coincidiría con "W46]" o
"-46]". Sin embargo, si el "]" se escapa con una barra invertida, se interpreta como el final del rango, por lo que [W-\]46] es
interpretado como una sola clase que contiene un rango seguido de dos
caracteres separados. También se puede usar la representación octal o hexadecimal
de "]" para terminar un rango.
Los rangos operan en la secuencia de clasificación ASCII. También pueden usarse para caracteres especificados numéricamente, por ejemplo
[\000-\037]. Si se usa un rango que incluye letras cuando se establece la
coincidencia sin distinción de mayúsculas y minúsculas, coincide con
las letras en cualquier caso. Por ejemplo, [W-c] es equivalente a
[][\^_`wxyzabc], coincidiendo sin distinción de mayúsculas y minúsculas, y si se usan tablas de caracteres para la configuración regional "fr", [\xc8-\xcb] coincide
con caracteres E acentuados en ambos casos.
Los tipos de caracteres \d, \D, \s, \S, \w, y \W también
pueden aparecer en una clase de caracteres, y añaden los caracteres que
coinciden a la clase. Por ejemplo, [\dABCDEF] coincide con cualquier
dígito hexadecimal. Un circunflejo puede usarse convenientemente
con los tipos de caracteres mayúsculas para especificar un conjunto más
restringido de caracteres que el tipo minúscula correspondiente.
Por ejemplo, la clase [^\W_] coincide con cualquier letra o dígito,
pero no con el guión bajo.
Todos los caracteres no alfanuméricos excepto \, -, ^ (al inicio) y el terminador ] son no especiales en clases de caracteres, pero no causa daño si están escapados. El terminador del patrón es siempre especial y debe escaparse cuando se usa
dentro de una expresión.
Perl soporta la notación POSIX para clases de caracteres. Esta usa nombres
encerrados por [:
y :]
dentro
de los corchetes de apertura y cierre. PCRE también
soporta esta notación. Por ejemplo, [01[:alpha:]%]
coincide con "0", "1", cualquier carácter alfabético, o "%". Las clases de nombres soportadas son:
Clases de caracteres
alnum | letras y dígitos |
alpha | letras |
ascii | códigos de caracteres 0 - 127 |
blank | solo espacio o tabulación |
cntrl | caracteres de control |
digit | dígitos decimales (igual que \d) |
graph | caracteres de impresión, excluyendo espacio |
lower | letras minúsculas |
print | caracteres de impresión, incluyendo espacio |
punct | caracteres de impresión, excluyendo letras y dígitos |
space | espacio en blanco (no exactamente igual que \s) |
upper | letras mayúsculas |
word | caracteres de "palabra" (igual que \w) |
xdigit | dígitos hexadecimales |
Los caracteres
space
son HT (9), LF (10), VT (11), FF (12), CR (13),
y espacio (32). Observe que esta lista incluye el carácter VT (código
11). Esto hace que "space" sea diferente a
\s
, que no incluye VT (para compatibilidad con Perl).
El nombre word
es una extensión de Perl, y blank
es una extensión de GNU
de Perl 5.8. Otra extensión de Perl es la negación, que se indica
con un carácter ^
después de los dos puntos. Por ejemplo,
[12[:^digit:]]
coincide con "1", "2", o cualquier no dígito.
En modo UTF-8, los caracteres con valores mayores que 128 no coinciden con ninguna
de las clases de caracteres POSIX.
A partir de libpcre 8.10, algunas clases de caracteres se cambian para usar
propiedades de caracteres Unicode, en cuyo caso la restricción mencionada no se aplica. Consulte el » manual PCRE(3)
para obtener más detalles.
Las propiedades de caracteres Unicode pueden aparecer dentro de una clase de caracteres. No pueden ser parte de un rango. El carácter de guión después de una clase de caracteres Unicode coincidirá literalmente. Intentar terminar un rango con una propiedad de caracteres Unicode resultará en una advertencia.