Vorheriges Thema: AlternativenNächstes Thema: Zeilenverankerungen


Sätze

Ein Satz ist ein Zeichensatz, der jedem einzelnen Zeichen des Satzes entsprechen kann. Sätze stehen in "[" und "]" und können Literale, Zeichenbereiche, Zeichenklassen, Reihenelemente und Äquivalenzklassen enthalten. Satzvereinbarungen, die mit "^" beginnen, enthalten das Komplement der folgenden Element.

Beispiele für Zeichenliterale:

Beispiele für Zeichenbereiche:

Beachten Sie bitte, dass Zeichenbereiche kontextabhängig sind: Sie entsprechen allen Zeichen zwischen den Bereichsendpunkten; die Bereiche verhalten sich nur entsprechend den ASCII-Regeln, wenn die Standardquelle "C" wirksam ist. Wenn die Bibliothek beispielsweise mit dem Win32-Lokalisierungsmodell kompiliert wird, entspricht "[a-z]" den ASCII-Zeichen "a-z" und ebenfalls "A", "B" usw., jedoch nicht "Z", dass unmittelbar hinter "z" angeordnet ist. Dieses gebietsschemaspezifische Verhalten kann deaktiviert werden, indem beim Kompilieren "regbase::nocollate" angegeben wird. Dies ist das Standardverhalten, wenn "regbase::normal" verwendet wird, das bewirkt, dass Bereiche sich zwangsweise nach ASCII-Zeichencode gruppieren. Entsprechend gilt, dass bei Verwendung der POSIX C API-Funktionen durch REG_NOCOLLATE die gebietsschemaabhängige Gruppierung vermieden wird.

Zeichenklassen werden innerhalb einer Satzvereinbarung mit der Syntax "[:classname:]" angegeben, zum Beispiel "[[:space:]]" ist der Satz aller Leerraum-Zeichen. Zeichenklassen stehen nur zur Verfügung, wenn der Merker regbase::char_classes gesetzt ist. Die verfügbaren Zeichenklassen sind:

alnum

Beliebiges alphanumerisches Zeichen

alpha

Beliebiges alphabetisches Zeichen: a – z und A – Z. Andere Buchstaben können, je nach Gebietsschema, ebenfalls aufgenommen werden.

blank

Alle leeren Zeichen, entweder ein Leerzeichen oder ein Tabulatorzeichen

cntrl

Alle Steuerzeichen

digit

Alle Ziffern von 0 – 9

graph

Alle grafischen Zeichen

lower

Beliebiges kleines Zeichen: a – z Andere Buchstaben können, je nach Gebietsschema, ebenfalls aufgenommen werden.

print

Alle druckbaren Zeichen

punct

Alle Interpunktionszeichen

space

Alle Leerraum-Zeichen

upper

Beliebiges großes Zeichen: A – Z Andere Buchstaben können, je nach Gebietsschema, ebenfalls aufgenommen werden.

xdigit

Alle hexadezimalen Zeichen, 0 – 9, a – f und A – F.

word

Alle Wortzeichen – alle alphanumerischen Zeichen sowie der Unterstrich

unicode

Alle Zeichen deren Code größer als 255 ist; dies trifft nur für die "wide character traits"-Klassen zu.

Anstatt der Zeichenklassen können einige Verknüpfungen verwendet werden; vorausgesetzt der Merker regbase::escape_in_lists ist gesetzt, können Sie verwenden:

Gruppierungselemente haben in Satzvereinbarungen die allgemeine Form [.tagname.], wobei tagname entweder ein einzelnes Zeichen oder ein Name eines Gruppierungselements ist, zum Beispiel [[.a.]] entspricht [a], und [[.comma.]] entspricht [,]. Die Bibliothek unterstützt die Standard-POSIX-Gruppierungselementnamen und außerdem folgende Digraphen: "ae", "ch", "ll", "ss", "nj", "dz", "lj", jeweils in der Variation klein, groß und Titlecase. Mehrere Zeichen umfassende Gruppierungselemente können dazu führen, dass der Satz mehr als einem Zeichen entspricht. Beispielsweise würde [[.ae.]] zwei Zeichen entsprechen; beachten Sie jedoch bitte, dass [^[.ae.]] nur einem Zeichen entspricht.

Equivalence Classes nehmen innerhalb von Satzvereinbarungen die allgemeine Form [=tagname=] an, wobei tagname entweder ein einzelnes Zeichen oder ein Name eines Grupppierungselements ist und jedem Zeichen entspricht, das zu derselben primären Klasse wie das Gruppierungselement [.tagname.] gehört. Eine Equivalence Class ist ein Zeichensatz, der denselben sortiert; eine primäre Equivalence Class ist ein Zeichensatz, dessen primäre Sortierschlüssel alle gleich sind (Strings werden beispielsweise nach Zeichen sortiert, dann nach Akzent und dann nach Schreibweise; der primäre Sortierschlüssel bezieht sich dann auf das Zeichen, der sekundäre auf die Akzentierung und der tertiäre auf die Schreibweise). Wenn keine Equivalence Class vorhanden ist, die tagname entspricht, dann ist [=tagname=] genau dasselbe wie [.tagname.]. Leider gibt es keine vom Gebietsschema unabhängige Methode zum Anlegen des primären Sortierschlüssels für ein Zeichen, außer unter Win32. Bei anderen Betriebssystemen "schätzt" die Bibliothek den primären Sortierschlüssel über den vollständigen Sortierschlüssel (aus strxfrm); daher werden Equivalence Classes wahrscheinlich unter allen anderen Betriebssystemen als Win32 als "broken" betrachtet.

Um ein Literal "-" in einen Vereinbarungssatz aufzunehmen: Setzen Sie es als erstes Zeichen hinter die Eröffnung "[" oder "[^", einen Bereichsendpunkt, ein Gruppierungselement, oder, wenn der Merker regbase::escape_in_lists gesetzt ist, stellen Sie ihm ein Escape-Zeichen voran wie in "[\-]". Um ein Literal "[" or "]" oder "^" in einen Satz aufzunehmen, setzen Sie es als Bereichsendpunkt, als Gruppierungselement, oder stellen Sie ihm ein Escapezeichen voran, wenn der Merker regbase::escape_in_lists gesetzt ist.