Tema anterior: Alternativas

Tema siguiente: Delimitadores de línea

Conjuntos

Un conjunto es un conjunto de caracteres que pueden coincidir con cualquier carácter solo que pertenezca al conjunto. "[" y "]" delimitan los conjuntos, y pueden contener literales, intervalos de caracteres, clases de caracteres, elementos de agrupación y clases de equivalencia. Las declaraciones de conjuntos que empiezan con "^" contienen el cumplimiento de los siguientes elementos.

Ejemplos de literales de caracteres:

Ejemplos de intervalos de caracteres:

Tenga en cuenta que los intervalos de caracteres dependen en gran medida de la configuración regional: coinciden con cualquier carácter que se agrupe entre los puntos finales del intervalo. Los intervalos se comportarán conforme a las reglas ASCII únicamente cuando la configuración regional "C" predeterminada esté en vigor. Por ejemplo, si la biblioteca se ha recopilado con el modelo de localización de Win32, [a-z] coincidirá los caracteres a-z de ASCII, y 'A', 'B' etc, pero no 'Z', ya que va justo después de 'z'. Este comportamiento específico de la configuración regional se puede desactivar mediante la especificación de regbase::nocollate durante la recopilación. Este es el comportamiento predeterminado al utilizar regbase::normal, y se imponen los intervalos que se agruparán según el código de caracteres ASCII. Asimismo, si utiliza las funciones de POSIX C API, al establecer REG_NOCOLLATE se desactiva la agrupación dependiente de la configuración regional.

Se indican las clases de caracteres mediante la sintaxis "[:classname:]" en una declaración de conjuntos. Por ejemplo, "[[:space:]]" es el conjunto de todos los caracteres de espacio en blanco. Las clases de caracteres solamente están disponibles si se ha establecido el indicador regbase::char_classes. Las clases de caracteres disponibles son:

alnum

Cualquier carácter numérico alfa.

alfa

Cualquier carácter alfabético de a-z y A-Z. Se pueden introducir otros caracteres en función de la configuración regional.

espacio

Cualquier carácter en blanco: un espacio o una tabulación.

cntrl

Cualquier carácter de control.

digito

Algún dígito de 0-9.

gráfico

Cualquier carácter gráfico.

minúscula

Cualquier carácter en minúsculas de a-z. Se pueden introducir otros caracteres en función de la configuración regional.

imprimir

Cualquier carácter que se pueda imprimir.

puntuación

Cualquier carácter de puntuación.

espacio

Cualquier carácter de espacio en blanco.

mayúscula

Cualquier carácter en mayúsculas de A-Z. Se pueden introducir otros caracteres en función de la configuración regional.

digito hexadecimal

Cualquier carácter de dígito hexadecimal: 0-9, a-f y A-F.

palabra

Cualquier carácter de palabra (todos los caracteres alfanuméricos y el guión bajo).

unicódigo

Cualquier carácter cuyo código sea superior a 255. Esto sólo se aplica a las clases de rasgos de caracteres amplios.

Hay algunos accesos directos que se pueden utilizar en lugar de las clases de caracteres, siempre que se haya establecido el indicador regbase::escape_in_lists, se puede utilizar:

Los elementos de agrupación adoptan la forma general [.tagname.] en una declaración de conjuntos, donde tagname es un carácter solo o el nombre de un elemento de agrupación, por ejemplo [[. a.]] equivale a [un] y [[.comma.]] equivale a [,]. La biblioteca admite todos los nombres de elementos de agrupación de POSIX estándares, además los siguiente dígrafos: "ae", "cap", "ll", "ss", "nj", "dz", "lj" (en minúsculas, mayúsculas, superior y combinaciones de ambas). Los elementos de agrupación de varios caracteres pueden dar lugar al conjunto que coincide con más de un carácter, por ejemplo, [[.ae.]] coincidiría con dos caracteres, pero tenga en cuenta que [^[.ae.]] coincidiría solamente con un carácter.

Las clases de equivalencia toman la forma general [=tagname=] en una declaración de conjunto, donde tagname es un carácter solo o el nombre de un elemento de agrupación, y coincide con cualquier carácter que pertenezca a la misma clase de equivalencia primaria que el elemento de agrupación [.tagname.]. Una clase de equivalencia es un conjunto de caracteres que agrupan lo mismo. Una clase de equivalencia primaria es un conjunto de caracteres cuya clave de clasificación primaria es idéntica (por ejemplo, las cadenas suelen agruparse por caracteres, a continuación, por acento, y, a continuación, por uso de mayúsculas o minúsculas. La clave de clasificación primaria hace referencia al carácter, la secundaria al acento y la terciaria terciario al uso de mayúsculas y minúsculas). Si no hay ninguna clase de equivalencia correspondiente a tagname, [=tagname=] coincide exactamente con [.tagname.]. Por desgracia, no hay ningún método independiente de la configuración regional de obtener la clave de clasificación primaria para un carácter, excepto en Win32. Para los demás sistemas operativos, la biblioteca "adivinará" la clave de clasificación primaria a partir de la clave de clasificación completa (obtenida a partir de strxfrm). Por lo que es mejor considerar que las clases de equivalencia no funcionan en cualquier sistema operativo que no sea Win32.

Para incluir un literal "-" en una declaración de conjunto: conviértalo en el primer carácter después de la abertura "[" o "[^", el punto final de un intervalo, un elemento de intercalación o, si el indicador regbase::escape_in_lists se ha establecido, comience con un carácter de escape, como en "[\-]". Para incluir un literal "[" o "]" o "^" en un conjunto, conviértalos en el punto final de un intervalo, un elemento de agrupación o comience con un carácter de escape si se ha establecido el indicador regbase::escape_in_lists.