Windows PowerShell

Reguläre Ausdrücke – Erläuterungen

Don Jones

In den letzten ich habe geschrieben über reguläre Ausdrücke in Windows PowerShell hauptsächlich aus der Perspektive des wie Sie funktionieren und wie Sie Sie verwenden können.In diesem Monat werde ich eine reale, praktische Anwendung von regulären Ausdrücken in der Shell konzentrieren auf.Basierend auf einer Debitor-Lösung, die ich erstellt habe, ist dies ein gutes Beispiel für reguläre Ausdrücke Strom.

Eine reguläre Problem

Das Problem aufgetreten ist etwa wie folgt: Ich musste Windows PowerShell verwenden, um den Text einer Webseite abzurufen.Sollten Sie beachten, die als einfachen Text-Dokument mit HTML-Anweisungen überträgt die Webseite, auf wie die Seite in einem Webbrowser wiedergegeben werden sollen.Aus, dass der Text musste ich alle Hyperlinks zu extrahieren, die Sie als Liste anzeigen und entweder Ausgabe diese in eine lokale Textdatei oder speichern Sie in irgendeiner anderen Weise.In HTML ein Hyperlink wird durch das < a >-Tag angegeben, und sieht etwa wie folgt aus: Klicken Sie auf http://concentratedtech.com hier Besuchen

Eine Schwierigkeit entsteht, dass die < a >-Tags eine Reihe von optionalen Parametern angeben, z. B. Ziel,-unterstützt, die erzwingt, die Verknüpfung zum Öffnen einer neuen Seite dass.&Lt; a >-Tags kann manchmal vorhanden sein, ohne den Href Parameter stattdessen einschließlich Name Parameter, der einen Anker in Seite einrichtet.Ich insbesondere nicht diejenigen erfassen möchten, sollte nur seriöses Gebiet ausgehende Verknüpfungen zu einer anderen Seite.

Während ich zur Deckung von Funktionen und Techniken in PowerShell v1 in meinem Artikel weiterhin werde konzentriere mehr und mehr ich Mich auf Features, die spezifisch für v2.PowerShell v2 im Lieferumfang von und in Windows 7 und Windows Server 2008 R2 vorinstalliert ist.Wenn Sie dies lesen, oder kurz danach sollte PowerShell v2 für Windows Vista, Windows Server 2008, Windows XP und Windows Server 2003 verfügbar sein.Besuchen Sie die Microsoft.com/PowerShell für Verfügbarkeit überprüfen und Downloaden von Verknüpfungen.

Eine reguläre Puzzle

Arbeiten mit regulären Ausdrücken kann wesentlich sein, wie ein Rätsel zu lösen.Als ob Sie beginnend bei eins dieser dreidimensionalen Poster wurden, squinting hilft.Sie müssen die Informationen in Form eines Musters und nicht als einzelne Zeichen anzeigen.Squinting kann helfen, die Zeichen zu weichzeichnen, damit Sie sich auf dem größeren Muster konzentrieren können.Berücksichtigen Sie diese vier Hyperlinks: http://concentratedtech.com.Klicken Sie auf hier zu besuchen.

<a name="data">Datenblatt</a>

<a target="_blank" href="https://microsoft.com">Microsoft</a>

<a href="search.aspx" target="_top">Suchen</a>

Verknüpfungen zu erfassen, die diesen gemeinsamen Elemente haben soll:

  • Alle beginnen mit <a
  • Alle beenden mit </a >
  • Alle enthaltenen href =" an einer Stelle nach den <a und vor der >

Ich möchte eine Verknüpfung zu erfassen, die nicht alle dieser Elemente enthält.Wird ignoriert, die ich nicht kenne Bits und squinting, werden die Verknüpfungen wie folgt aussehen:

<a_href=”xxxxxxxxx">xxxxxxx</a>

<a_xxxxxxxx>xxxxxxx</a>

<a_xxxxxxxxxx_href="xxxxxxxxx">xxxxxxxx</a>

<a_href="xxxxxxxxx"_xxxxxxxxxx>xxxxxxxx</a>

Beachten Sie, dass ich das Leerzeichen durch einen Unterstrich nur um es hervorzuheben etwas mehr ersetzt haben, und ersetzt die Dinge, die ich nicht kenne mit “ X. ” Diese Anfang sehr viel mehr ähnlich aussehen, und ein Muster plötzlich, hervorgeht.

Eine reguläre Muster

Muster werden der gesamte Punkt von regulären Ausdrücken.Verwenden die Sprache für reguläre Ausdrücke, Beschreiben Sie die für das gesuchte Textmuster.Sie erhalten eine ziemlich umfassende Beschreibung für diese Sprache, indem Sie Hilfe About_regular_expressions in Windows PowerShell ausgeführt.

In meinem Fall könnte mein reguläre Ausdruck wie folgt aussehen:

(< a\s.{0,}?href=".+?".{0,}? >. +? </a >)

Ich weiß, verrückte ist.Beim Abrufen rechten dauerte ungefähr eine Stunde mit einer großen Menge an Hilfe aus der Website RegExTester.com.Mich es zerlegen:

  • (Klammern) ein Muster für einen einzelnen Hyperlink definieren, und informieren Sie der Shell erfassen die Übereinstimmungen (mehr dazu später).
  • Das < ein literal Übereinstimmung; die Shell sucht nach diesen zwei Zeichen.
  • \s bedeutet So vergleichen Sie ein Zeichen einzelnen Leerzeichen wie ein Leerzeichen ein, die immer folgen sollten < eine in HTML.
  • .{0,}?bedeutet, dass ich NULL oder mehr Zeichen jeglicher Art anzeigen möchten.Die Periode bedeutet, dass “ beliebiges Zeichen ” und die {0} bedeutet, dass NULL oder mehr.Das nachfolgende Fragezeichen ist ein Sonderfall.Es macht die Übereinstimmung nicht gierige (mehr dazu in einer Sekunde).
  • Ich möchte Nächstes sehen, das Literal Zeichen Href = "
  • Als Nächstes soll eine oder mehrere eines beliebigen Zeichens angezeigt.Das Pluszeichen (+) bedeutet, dass “ eine oder mehrere ” und, noch einmal ein abschließendes Fragezeichen macht es nicht gierige.
  • Im Anschluss daran ein schließendes Anführungszeichen angezeigt werden soll.
  • Dann 0 (null) oder mehr Zeichen und dem schließenden finden Sie unter soll >.
  • Schließlich möchte ich eine oder mehrere Zeichen vor dem </a > finden Sie unter.Hier dadurch ebenfalls das Fragezeichen nach der das Pluszeichen (+) eine nicht gierige Übereinstimmung.

Dieses nicht gierige Unternehmen ist nicht ganz einfach.Sagen Sie Let’s ich in meinem HTML-Seite die folgende Textzeichenfolge haben:

Dies ist eine <a href="test">link</a> und dies ist eine <a href="test">link</a>, aber dies ist nicht.

Und let’s sagen ich verwende dieser regulären Ausdruck, der nicht die Fragezeichen verwendet wird, um nicht gierige Übereinstimmungen zu erstellen:

(<a\s.{0,}href=".+".{0,}>.+</a>)

Die Shell entsprechen den ersten < ein und Speicherplatz, und suchen Sie nach 0 (null) oder mehr Zeichen-– nur wenn Sie den letzten </a > findet endet.Ich werde fett formatiert verwenden, um anzeigen, was er übereinstimmt:

Dies ist ein <a href="test">link</a> und dies ist eine <a href="test">link</a>, aber dies ist nicht.

Das liegt daran, dass die erste. {0}, entspricht gierig : Die Shell beansprucht so viele Zeichen wie möglich, während der Arbeit mit regulären Ausdruck.Indem Sie nicht gierige , ich feststellen, dass er, möglichst wenige Zeichen wie möglich zu nutzen, während der Arbeit mit regulären Ausdruck:

Dies ist ein <a href="test">link</a> und dies ist ein <a href="test">link</a>, aber dies ist nicht.

Eine reguläre Projektmappen

Dies funktioniert in der Shell gesagt, die ich durch eine Test-Variable definieren und füllen es mit HTML-gestartet.Anschließend verwendet der - Übereinstimmung-Operator, um den Test HTML anhand meiner regulären Ausdrucks übereinstimmen.

PS C:\> $html = 'Hierbei handelt es sich um eine <a href="test">Test</a> aber <a name="anchor">ist nicht dieser </a> und <a target="_top" href="something">definitiv</a> eine Verknüpfung ist.'

PS C:\> $html -match '(<a\s.{0,}?href=".+?".{0,}?>.+?</a>)'

True

Das Ergebnis “ true ” einfach mitteilt, dass die Shell eine oder mehrere Übereinstimmungen gefunden; es ist nicht Infos was er verglichen.Allerdings nach der Verwendung der --Operator Übereinstimmung die Shell automatisch ein Array, mit dem Namen $ Übereinstimmungen erstellt.Dieses Array enthält alle aufgezeichneten Übereinstimmungen:

PS C:\> $matches

Name Wert
1 <a href="test">test</a>
0 <a href="test">test</a>

Ich können einzelne Übereinstimmungen mit normalen Arraysyntax zugreifen:

PS C:\> $matches[0]

<a href="test">test</a>

Ich kann einfach diese an eine Datei zu senden:

PS C:\> $matches | out-file c:\matches.txt

 

Nachdem Sie die Syntax beherrschen haben, wie es ist, bieten als bizarre reguläre Ausdrücke eine leistungsfähige und wertvolle Möglichkeit der übereinstimmenden sogar komplexe, Variable Muster in einem großen Textkörper.Sie können den Text, der das Muster entspricht extrahieren und damit arbeiten unabhängig von den Hauptteil des Texts.Dies ist besonders für das Analysieren von Protokolldateien, HTML-Dateien oder andere Arten von semistrukturierten Text.

 

Don Jonesredaktionelle Beiträge für TechNet Magazin*, und Windows PowerShell-Tipps und News am www.concentratedtech.com veröffentlicht. Er ist der Mitautor “ Windows PowerShell: TFM ” (SAPIEN Press, 2009), jetzt in der dritten Edition und Windows PowerShell, Version 2 abdecken.*

 

Verknüpften Inhalt