Tópico anterior: Alternativas

Próximo tópico: Âncoras de linha

Conjuntos

Um conjunto é um conjunto de caracteres que podem corresponder a qualquer caractere único que seja integrante do conjunto. Os conjuntos são delimitados por "[" e "]" e podem conter literais, intervalos de caracteres, classes de caracteres, elementos de agrupamento e classes de equivalência. Declarações de conjuntos que começam com "^" contêm o complemento dos elementos que se seguem.

Exemplos de caracteres literais:

Exemplos de intervalos de caracteres:

Observe que os intervalos de caracteres são altamente dependentes da localidade: eles correspondem a qualquer caractere que agrupa entre os pontos de extremidade do intervalo, os intervalos somente se comportarão de acordo com as regras ASCII quando a localidade "C" padrão estiver em vigor. Por exemplo, se a biblioteca estiver compilada com o modelo de localização do Win32, [a-z] corresponderá aos caracteres a-z ASCII, e também a 'A', 'B', etc., mas não ao 'Z', que agrupa logo depois de 'z'. Esse comportamento específico de localidade pode ser desativado por meio da especificação de regbase::nocollate ao compilar, este é o comportamento padrão ao usar regbase::normal, e força os intervalos a agruparem de acordo com o código de caracteres ASCII. Da mesma forma, se você usar as funções POSIX C API, a configuração de REG_NOCOLLATE desativa o agrupamento dependente de localidade.

As classes de caracteres são identificadas usando-se a sintaxe"[:classname:]" dentro de uma declaração do conjunto, por exemplo, "[[:space:]]" é o conjunto de todos os caracteres de espaço em branco. As classes de caracteres só estão disponíveis se o sinalizador regbase::char_classes estiver definido. As classes de caracteres disponíveis são:

alnum

Quaisquer caracteres alfanuméricos.

alfa

Qualquer caractere alfabético a-z e A-Z. Outros caracteres também podem ser incluídos, dependendo da localidade.

blank

Qualquer caractere em branco, seja um espaço ou uma tabulação.

cntrl

Qualquer caractere de controle.

digit

Qualquer dígito de 0 a 9.

graph

Qualquer caractere gráfico.

lower

Qualquer caractere minúsculo a-z. Outros caracteres também podem ser incluídos, dependendo da localidade.

print

Qualquer caractere imprimível.

punct

Qualquer caractere de pontuação.

space

Qualquer caractere de espaço em branco.

upper

Qualquer caractere maiúsculo a-z. Outros caracteres também podem ser incluídos, dependendo da localidade.

xdigit

Qualquer caractere de dígito hexadecimal, 0-9, a-f e A-F.

word

Qualquer caractere de palavra - todos os caracteres alfanuméricos mais o sublinhado.

unicode

Qualquer caractere cujo código seja maior que 255, este se aplica somente às classes de características de caracteres largos.

Há alguns atalhos que podem ser usados no lugar das classes de caracteres, desde que o sinalizador regbase::escape_in_lists esteja definido, é possível usar:

Os elementos de agrupamento assumem o formato geral [.tagname.] dentro de uma declaração do conjunto, onde nomedamarca é um caractere único ou um nome de um elemento de agrupamento, por exemplo, [[.a.]] é equivalente a [a] e [[.comma.]] é equivalente a [,]. A biblioteca oferece suporte a todos os nomes de elemento de agrupamento POSIX padrão e, além disso, os seguintes dígrafos: "ae", "ch", "ll", "ss", "nj", "dz", "lj", cada um em variações maiúsculas, minúsculas e de título. Os elementos de agrupamento de vários caracteres podem resultar em o conjunto corresponder a mais de um caractere, por exemplo, [[.ae.]] poderia corresponder a dois caracteres, mas observe que [^[.ae.]] somente corresponderia a um único caractere.

As classes de equivalência assumem o formato geral [=tagname=] dentro de uma declaração do conjunto, onde nomedamarca é um único caractere ou um nome de um elemento de agrupamento, e corresponde a qualquer caractere que seja um integrante da mesma classe de equivalência primária do elemento de agrupamento [.tagname.]. Uma classe de equivalência é um conjunto de caracteres que agrupa o mesmo, uma classe de equivalência primária é um conjunto de caracteres cuja chave de classificação primária é a mesma (por exemplo, sequências de caracteres são normalmente agrupadas por caractere, em seguida, por acento e, em seguida, por maiúsculas e minúsculas; a chave de classificação primária, então se refere ao caractere, em segundo lugar à acentuação e, em terceiro lugar, a maiúsculas e minúsculas). Se não houver nenhuma classe de equivalência correspondente ao nomedamarca, então [=tagname=] será exatamente o mesmo que [.tagname.]. Infelizmente não há um método independente da localidade para obter a chave de classificação primária de um caractere, exceto no Win32. Para outros sistemas operacionais, a biblioteca irá "adivinhar" a chave de classificação primária a partir da chave de classificação completa (obtida de strxfrm), portanto, será melhor considerar as classes de equivalência interrompidas em qualquer sistema operacional diferente do Win32.

Para incluir um literal "-" em uma declaração do conjunto: torne-o o primeiro caractere após a abertura "[" ou "[^", o ponto de extremidade de um intervalo, um elemento de agrupamento, ou se o sinalizador regbase::escape_in_lists estiver definido, preceda com um caractere de escape, como em "[\-]". Para incluir um literal "[" ou "]" ou "^" em um conjunto, torne-os o ponto de extremidade de um intervalo, um elemento de agrupamento, ou preceda com um caractere de escape se o sinalizador regbase::escape_in_lists estiver definido.