Von Holger Voges auf Samstag, 03. Februar 2024
Kategorie: Tipp

Text für reguläre Ausdrücke vorbereiten - Spezialzeichen ersetzen

​Reguläre Ausdrücke sind in allen Programmier-Sprachen ein mächtiges Werkzeug, um Texte zu analysieren und aufzubrechen. In Powershell steht einem hierfür unter anderem der Vergleichsoperator -match zur Verfügung. Reguläre Ausdrücke reichen dabei von sehr einfach bis sehr kompliziert. Das folgende Beispiel fällt z.B. in die erste Kategorie:

Das Codebeispiel prüft, ob in dem linken Ausdruck 'C:\windows\system32' der Suchbegriff 'windows' auftaucht. Reguläre Ausdrücke können aber auch Textmuster beschreiben und verwenden dafür spezielle Platzhalter wie \d, \w oder . (also das Punktsymbol). \w steht dabei für ein "word", also einen Buchstaben, \d für eine digit (Ziffer) und . ist ein beliebiges Zeichen und hat die gleiche Bedeutung wie das * in sogenannten Globs oder global expressions. Dumm nur, wenn im Suchbegriff ein . oder das \-Symbol vorkommt, denn dann bekommt das Suchmuster plötzlich eine ganz andere Bedeutung:

In diesem Beispiel sucht der reguläre Ausdruck nicht mehr nach \windows, sondern nach einem beliebigen Buchstaben, gefolgt von indows - \w ist ja der Platzhalter für einen beliebigen Buchstaben. Natürlich gibt es für dieses Problem eine Lösung - man muss den "\" doppelt angeben, um einen "\" zu erhalten: \\windows im regulären Ausdruck wird also zu \windows im Suchtext. Diesem Phänomen begegnet man oft in Skripten, in denen Pfade dann plötzlich in diesem komischen Format auftauchen: C:\\Windows\\System32. 

Wenn man nach einem spezifischen Text suchen möchte, der besondere Symbole (Zeichen) in regulären Ausdrücken enthält, kann man sich vom .Net Framework helfen lassen, denn die Klasse [RegEx] enthält eine Methode, die automatisch alle Sonderzeichen ersetzt.

​Das Codebeispiel gibt den Text 'C:\\Windows\\System32\\' zurück. 

Kommentare hinterlassen