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. |
|
|
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.
| Copyright © 2012 CA. Todos os direitos reservados. | Enviar email à CA Technologies sobre este tópico |