Regex Zeichen Klassen
Summary: Weiterführende Informationen zu Zeichenklassen in .NET
Index: RegularExpressions

Wir haben Zeichenklassen in .NET bereits als

12.06.2004 22:07:22 - Alexander Zeitler
RegexElemente kennen gelernt. Dort wurde allerdings nur das Konzept vor gestellt, hier beschäftigen wir uns nun mit den 'blutigen Details'.

Kontinuierliche Folgen

Um die explizite Angabe von allen erlaubten Zeichen in einer Zeichenklasse zu vermeiden können wir kontinuierliche Folgen spezifizieren. Statt [abcdef] können wir [a-f] schreiben. Dabei sind allerdings einige Dinge zu beachten:

  • Die Folge muss (vom ASCII-wert her) aufsteigend sein, also [a-z], nicht aber [z-a].
  • Man sollte wissen was man will - [a-Z] enthält nicht nur die Buchstaben von a-z und A-Z wie man naiverweise annehmen könnte.
  • Eine Zeichenklasse kann mehrere kontinuierliche Folgen enthalten.

Kürzel

Einige häufige Kürzel für bestimmte Zeichenklassen wie 'nur Ziffern' haben wir bereits kennengelernt. Bisher haben wir uns aber nur mit ASCII beschäftigt. Wie sieht es nun mit 'moderneren' Zeichensätzen (unicode) aus? Jenseits von 7-Bit ASCII gibt es ja ein ganzes Universum an Zeichen die wir bisher nicht berücksichtigt haben. Einzelne Zeichen lassen sich ja leicht über ihren numerischen Code ansprechen wie wir wissen. Schön wäre es jetzt wenn man analog zu den bisher betrachteten Kürzeln für 'Leerzeichen', 'Ziffern', 'Alphanumerische Zeichen' usw. auch für solche Zeichen jenseits von ASCII Kürzel hätte...

.NET bietet netterweise derartige Kürzel an:

\p{Name_der_Zeichenklasse} und

\P{Name_der_Zeichenklasse} als die Verneinung dazu.

Name_der_Zeichenklasse entspricht dabei einer Unicode-Kategorie (Name_der_Zeichenklasse, offizieller Unicodename, Erklärung):

Buchstaben:

Ll ... Letter, lowercase - Kleinbuchstabe

Lm ... Letter, modifier - verändert das vorhergehende Zeichen

Lo ... Letter, other - Buchstabe der weder Gross- noch Klein- noch Titelbuchstabe noch Modifikator ist (Verwirrt?)

Lt ... Letter, titlecase - Titelbuchstaben (Initiale)

Lu ... Letter, uppercase - Grossbuchstaben

Ziffern:

Nd ... Number, decimal digit - Dezimalziffer

Nl ... Number, letter - Ziffer die durch Buchstaben dargestellt ist. Z.B. Römische Ziffern

No ... Number, other - Zahl die keine Ziffer ist. Z.B. das '1/2'-zeichen

Satzzeichen:

Pe ... Punctuation, close - Abschliessendes Satzzeichen bei gepaarten Zeichen (Klammern usw.)

Pc ... Punctuation, connector - Satzzeichen das zwei Zeichen verbindet

Pd ... Punctuation, dash - Bindestrich, Trennstrich

Pf ... Punctuation, final quote - abschliessendes Anführungszeichen

Pi ... Punctuation, initial quote - Anfängliches Anführungszeichen

Ps ... Punctuation, open - Anfängliches gepaartes Zeichen (Klammern usw.)

Po ... Punctuation, other - Satzzeichen das in keine der anderen Satzzeichenklassen fällt

Symbole:

Sc ... Symbol, currency - Währungszeichen

Sm ... Symbol, math - Mathematische Zeichen

Sk ... Symbol, modifier - Beeinflusst die umgebenden Zeichen. Z.B. Bruchstrich

Sonstiges:

Cc ... Other, control - Steuerzeichen

Cf ... Other, format - nichtdruckendes Zeichen das die Formatierung beeinflusst

Cn ... Other, not assigned - fällt in keine der Unicode-kategorien

Co ... Other, private use - zu privater Verwendung

Cs ... Other, surrogate - Surrogatzeichen

Me ... Mark, enclosing - eine Umschliessung mehrerer Zeichen die selbst keines ist. Typisch Unicode.

Mn ... Mark, nonspacing - nicht weiterrückendes Zeichen, das ein anderes Zeichen modifiziert

Ms ... Mark, spacing combining - beeinflusst die Weite eines Zeichens

Zl ... Separator, line - Zeilentrenner

Zp ... Separator, paragraph - Absatztrenner

Zs ... Separator, space - Zeichentrenner, aber kein Steuerzeichen

Zur Verwendung dieser Zeichenklassen ist System.Globalization notwendig.

Erklärungen zu dem Unicode-fachchinesisch finden sich auf der entsprechenden Website http://www.unicode.org