Un set è un insieme di caratteri che può corrispondere a qualsiasi carattere singolo membro del set. I set sono delimitati da [ e da ] e possono contenere valori letterali, intervalli di caratteri, classi di caratteri, elementi di fascicolazione e classi di equivalenza. Le dichiarazioni di set che iniziano con ^ contengono il complemento degli elementi che seguono.
Esempi di valori letterali di caratteri:
Esempi di intervalli di caratteri:
Nota: gli intervalli di caratteri dipendono molto dalle impostazioni internazionali; corrispondono a qualsiasi carattere fascicolato tra le estremità dell'intervallo. Gli intervalli si comportano solo secondo le regole ASCII quando il valore predefinito "C" delle impostazioni internazionali è in vigore. Ad esempio, se la libreria è compilata con il modello di localizzazione Win32, allora [a-z] corrisponde ai caratteri ASCII a-z e anche ad "A", "B" ecc., ma non a "Z", fascicolato subito dopo "z". Questo comportamento specifico per impostazioni internazionali può essere disabilitato specificando regbase::nocollate durante la compilazione. Si tratta del comportamento predefinito quando si utilizza regbase::normal e impone agli intervalli la fascicolazione secondo il codice di caratteri ASCII. Allo stesso modo, se si utilizzano le funzionalità POSIX C API, impostando REG_NOCOLLATE viene disattivata la fascicolazione dipendente dalle impostazioni internazionali.
Le classi di caratteri sono indicate utilizzando la sintassi [:classname:] all'interno di una dichiarazione di set; ad esempio, [[:space:]] è il set di tutti gli spazi vuoti. Le classi di caratteri sono disponibili solo se è impostato il contrassegno regbase::char_classes. Le classi di caratteri disponibili sono:
|
alnum |
Qualsiasi carattere alfanumerico. |
|
alpha |
Qualsiasi carattere alfabetico a-z e A-Z. Possono essere inclusi altri caratteri a seconda delle impostazioni internazionali. |
|
blank |
Qualsiasi carattere vuoto, uno spazio o una tabulazione. |
|
cntrl |
Qualsiasi carattere di controllo. |
|
digit |
Qualsiasi cifra 0-9. |
|
graph |
Qualsiasi carattere grafico. |
|
lower |
Qualsiasi carattere minuscolo a-z. Possono essere inclusi altri caratteri a seconda delle impostazioni internazionali. |
|
|
Qualsiasi carattere stampabile. |
|
punct |
Qualsiasi carattere di punteggiatura. |
|
space |
Qualsiasi carattere di spazio vuoto. |
|
upper |
Qualsiasi carattere maiuscolo A-Z. Possono essere inclusi altri caratteri a seconda delle impostazioni internazionali. |
|
xdigit |
Qualsiasi carattere esadecimale, 0-9, a-f e A-F. |
|
word |
Qualsiasi carattere alfanumerico: tutti i caratteri alfanumerici e il carattere di sottolineatura. |
|
unicode |
Qualsiasi carattere con codice maggiore di 255. Vale solo per le classi di carattere wide. |
Alcuni collegamenti possono essere utilizzati al posto delle classi di carattere. Se è impostato il contrassegno regbase::escape_in_lists, è possibile utilizzare:
Gli elementi di fascicolazione assumono la forma generale [.tagname.] all'interno di una dichiarazione di set, in cui tagname è un carattere singolo o il nome di un elemento di fascicolazione; ad esempio, [[.a.]] equivale ad [a] e [[.comma.]] equivale a [,]. Oltre a tutti i nomi di elementi di fascicolazione standard POSIX, la libreria supporta i seguenti digrammi: "ae", "ch", "ll", "ss", "nj", "dz", "lj", nelle varianti minuscole, maiuscole e con iniziali maiuscole. Negli elementi di fascicolazione con più caratteri è possibile la corrispondenza di set di più caratteri: ad esempio, [[.ae.]] corrisponderebbe a due caratteri, ma [^[.ae.]] corrisponderebbe solo a un carattere.
Le classi di equivalenza hanno la forma generale [=tagname=] all'interno di una dichiarazione di set, in cui tagname è un singolo carattere o un nome di un elemento di fascicolazione e corrisponde a qualsiasi carattere che è membro della stessa classe di equivalenza primaria dell'elemento di fascicolazione [.tagname.]. Una classe di equivalenza è un set di caratteri ugualmente di fascicolazione. Una classe di equivalenza primaria è un set di caratteri con la stessa chiave di ordinamento principale (ad esempio, le stringhe, di solito, sono fascicolate per carattere, quindi per accento e maiuscole/minuscole; pertanto, la chiave di ordinamento principale fa riferimento al carattere, la chiave di ordinamento secondaria all'accento e la terziaria alla distinzione di maiuscole/minuscole). Se non esiste alcuna classe di equivalenza corrispondente a tagname, allora [=tagname=] è esattamente identico a [.tagname.]. Purtroppo non sono esiste un metodo indipendente dalle impostazioni internazionali per ottenere la chiave di ordinamento principale di un carattere, tranne in Win32. Per altri sistemi operativi, la libreria "estrapolerà" la chiave di ordinamento principale dalla chiave di ordinamento completo (ottenuta da strxfrm), in questo modo le classi di equivalenza verranno probabilmente interrotte in qualsiasi sistema operativo diverso da Win32.
Per includere un valore letterale - in una dichiarazione di set, inserirlo come primo carattere dopo l'apertura di [ o di [^, l'estremità di un intervallo, un elemento di ordinamento o, se il contrassegno regbase::escape_in_lists è impostato, precederlo con un carattere di escape come in [\-]. Per includere un valore letterale [ o ] o ^ in un set, rendere tale valore letterale l'estremità di un intervallo, un elemento di fascicolazione o farlo precedere da un carattere di escape se è impostato il contrassegno regbase::escape_in_lists.
|
Copyright © 2013 CA.
Tutti i diritti riservati.
|
|