Samstag, Januar 16, 2010

Powershell und Reguläre Ausdrücke

Die folgenden Beispiele können einfach per Copy&Paste in der Powershell nachvollzogen werden. Die größte Fehlerquelle sind die Tippfehler. Die Beispiele benutzen die Microsoft .Net Klasse für Reguläre Ausdrücke.

Die MSDN Dokumentation enthält hierzu einige Beispiele, die aber leider mit Schreibfehlern versehen sind. Das macht das ohnehin kaum verständlich lesbare Thema noch schwieriger. Hier sind einige Beispiele für die Benutzung in der Powershell:

[regex]::matches("901-333-","^\d{3}").item(0).value # es wird 901 anstatt 901- ausgegeben
[regex]::matches("901-333-","\A\d{3}").item(0).value # es wird 901 anstatt 901- ausgegeen

[regex]::matches("Wir sind die Moorsoldaten und ...","(\w)\1").item(0).value # findet doppelten Buchstaben oo
[regex]::matches("1234 3412","\b(\d{2})(\d{2}) \2\1").item(0).value #Backreferenzen auf zwei Gruppen
[regex]::matches("<tag> text </tag>","<([a-z]+)>[a-z ]+").item(0).value #Backreferenz auf den Tagnamen
[regex]::matches("<tag> text </tag>","(?i)<([a-z]+)>[a-z ]+").item(0).value #s.o., ignore case option
[regex]::matches("<tag> text </tag>","(?i)<.*>").item(0).value #greedy *, geht bis zum letzten >
[regex]::matches("<tag> text </tag>","(?i)<.*?>").item(0).value #lazy ?, geht bis zum ersten >
[regex]::matches("deep","(?<doppel>\w)\k<doppel>").item(0).value #benannte Gruppen mit <>
[regex]::matches("<tag> text </tag>","<(?'gruppe1'\w+)>(?'inhalt'[^<]+</\k'gruppe1'>)").item(0).value #benannte Gruppen mit ''

Keine Kommentare: