Clases carácter
Un corchete de apertura inicia una clase carácter,
finalizada por un corchete de cierre. Un corchete de
cierre por sí solo no es especial. Si se requiere
un corchete de cierre como un miembro de la clase, éste debería ser
el primer carácter de información en la clase (después de un circunflejo
inicial, si está presente) o escapado con una barra invertida.
Una clase carácter coincide con un sólo 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 sujeto no debe de estar en
el conjunto definido por la clase. Si un circunflejo es requerido
en realidad como un 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 carácter [aeiou] coincide con cualquier vocal
minúscula, mientras que [^aeiou] con cualquier carácter que no sea
una vocal minúscula. Observe que un circunflejo es sólo una
notación conveniente para especificar los caracteres que están en
la clase enumerando los que no están. Si no es una
declaración: aún consume un carácter de la cadena objetivo,
y falla si el punto actual está al final de la
cadena.
Cuando está establecida la coincidencia insensible a mayúsculas-minúculas, cualquier
letra en una clase representa tanto su versión en mayúsculas como
minusculas, así, por ejemplo, una clase insensible [aeiou] coincidice con "A"
así como con "a", y una clase insensible [^aeiou] no coincide con
"A", mientras que una versión sensible lo haría.
El carácter nueva línea nunca es tratado de manera especial en
las clases carácter, sin importar el establecimiento de la opción PCRE_DOTALL
o PCRE_MULTILINE.
Una clase como [^a] siempre coincidirá con una nueva línea.
El carácter menos (guión) se puede usar para especificar un rango
de caracteres en una clase carácter. Por ejemplo, [d-m]
coincide con cualquier letra entre d y m, inclusive. Si un carácter
- (menos) se requiere en una clase, se debe escapar con una
barra invertida o aparecer en una posición donde no pueda ser
interpretado como indicador de rango, típicamente como el primer o último
carácter en una clase.
No es posible tener un 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 "]" es escapado con una barra invertida
es interpretado como el final del rango, así [W-\]46] es
interpretado como un clase individual que contiene un rango seguido de dos
caracteres aparte. La representación octal o hexadecimal
de "]" también se puede usar al final del rango.
Los rangos operan en la secuencia de colación de ASCII. También se pueden
usar para caracteres especificados numéricamente, por ejemplo
[\000-\037]. Si un rango que incluye letras se usa cuando
se establece la coincidencia insensible a mayúsculas-minúsculas, coincide con las
letras en cualquier caso. Por ejemplo, [W-c] es equivalente a
[][\^_`wxyzabc], comparados insensiblemente, y si las tablas
de caracteres para la configuración regional "fr" están siendo usadas, [\xc8-\xcb] coincide
con caracteres E acentudos en ambos casos.
Los tipos de caracteres \d, \D, \s, \S, \w, y \W también pueden
aparecer en la clase carácter, y añaden a la clase los caracteres
que ellos representan. Por ejemplo, [\dABCDEF] coincide con cualquier
dígito hexadecimal. Un circunflejo se puede usar convenientemente
con los tipos de caracteres en mayúsculas para especificar un
conjunto de caracteres más restrictivo que el tipo de coincidencia en minúscula.
Por ejemplo, la clase [^\W_] coincide con cualquier letra o dígito,
excepto con el subrayado.
Todos los caracteres no alfanuméricos distintos de \, -, ^ (al
comienzo) y el ] finalizador no son especiales en una clase
carácter, pero no es perjudicial si se escapan. El terminador
de patrón siempre es especial y debe ser escapado cuando se usa
dentro de una expresión.
Perl soporta la notación POSIX para clases carácter. Ésta usa nombres
encerrados entre [:
y :]
dentro de los corchetes. PCRE también
soporta esta notación. Por ejemplo, [01[:alpha:]%]
coincide con "0", "1", cualquier carácter alfabético, o "%". Los nombres de las
clases soportadas son:
Clases carácter
alnum | letras y dígitos |
alpha | letras |
ascii | códigos de caracteres 0 - 127 |
blank | espacio o tabulación solamente |
cntrl | caracteres de control |
digit | dígitos decimales (lo mismo que \d) |
graph | caracteres imprimibles, excluyendo el espacio |
lower | letras minúsculas |
print | caracteres imprimibles, incluyendo el espacio |
punct | caracterse imprimibles, excluyendo letras y dígitos |
space | escpacio en blanco (casi lo mismo que \s) |
upper | letras mayúsculas |
word | caracteres "word" (palabra) (lo mismo 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 caracter VT (código
11). Esto hace que "space" sea diferente de
\s
, el cuál no incluye VT (por
compatibilidad con Perl).
El nombre word
es una extensión de Perl, y blank
es una extensión de GNU
desde Perl 5.8. Otra extensión de Perl es la negación, indicada
por un carácter ^
después de los dos puntos. Por ejemplo,
[12[:^digit:]]
coincide con "1", "2", o cualquier no-digito.
En el modo UTF-8, los caracteres con valores mayores que 128 no coinciden con ninguna
de las clases carácter POSIX.
A partir de PHP 5.3.0 y libpcre 8.10 se han cambiado algunas características para utilizar
propiedades de caracteres Unicode, en cuyo caso la restricción mencionada no
se aplica. Consulte el » manual de PCRE(3)
para más detalles.
Dentro de una clase de caracteres pueden aparecer propiedades de carácter de Unicode. No
pueden ser parte de un rango. El carácter menos (-) después de una clase de caracteres
de Unicode se comparará literalmente. Intentar finalizar un rango con una propiedad de
carácter Unicode resultará en una advertencia.