Reguläre Ausdrücke / Regular Expressions
Geschrieben von: Christian Koller Der Begriff "regulärer Ausdruck" ist Ihnen vielleicht schon einmal untergekommen. Reguläre Ausdrücke benutzt man um festzustellen, ob eine Zeichenkette einer bestimmten Form genügt, oder ob eine "passende" Zeichenkette in einer anderen Zeichenkette enthalten ist. Ob man nun prüfen will, ob eine Zeichenkette ihrer Form nach wirklich eine Email Adresse sein kann, oder ob man bestimmte Zeichenfolgen in einer langen Zeichenkette suchen oder gar ersetzen will - Reguläre Ausdrücke sind ein effizienter und intelligenter Weg um in einem ASP Skript diese Zeichenkettenoperationen durchführen zu lassen. Wie setzt man nun "Reguläre Asudrücke" in VBScript (und ASP) ein? Um Reguläre Ausdrücke in ASP Seiten überhaupt einsetzen zu können benötigen Sie am Webserver (IIS 4.0 oder IIS 5.0) die Version 5.0 (oder höher) der Scripting Engine. Die Version der Scripting Engine, die am Webserver installiert ist, können Sie mit folgendem ASP Skript überprüfen:
<% Function GetScriptEngine() Dim strSE strSE = ScriptEngine & " " strSE = strSE & ScriptEngineMajorVersion & "." strSE = strSE & ScriptEngineMinorVersion & "." strSE = strSE & ScriptEngineBuildVersion GetScriptEngine = strSE End Function Response.Write GetScriptEngine() %> Um dieses Script auf unserem Webserver auszuführen klicken Sie auf VBScript Version testen. Die neueste Version der VBscript.dll können Sie bei Microsoft downloaden - die Links dazu finden Sie am Ende des Artikels. Einsatz von regulären Ausdrücken in VBScript 5Unter VBScript 5 geht man wie folgt vor, um mit Hilfe von regulären Ausdrücke spezifische Textstellen in einer Zeichenkette zu finden:
Ein einfaches ASP Skript, das diese Schritte ausführt, sieht zum Beispiel wie folgt aus: <% TestEmail "webmaster@aspheute.de" TestEmail "a@b.c" TestEmail "master@the.universe" Function TestEmail(strEmail) ' ### Generieren des RegExp Objectes Set objRegAusdr = New RegExp ' ### Pattern-Zuweisung zum Testen ' ### auf Email der Form Name@Domain.com strPattern = "^.+@.+\...+$" objRegAusdr.Pattern = strPattern ' ### Setzen: Gross/Kleinschreibung nicht beachten objRegAusdr.IgnoreCase = True ' ### Zeichenkette strEmail nach Pattern durchsuchen Set Matches = objRegAusdr.Execute(strEmail) If Matches.Count = 1 Then ' ### Ein Treffer ' ### (Count der Matches Collection ist 1) ' ### Muster in Pattern passt genau zu ' ### Inhalt von strTest: Response.Write(strEmail & " = Email Adresse!") Else ' ### Muster in Pattern passt nicht ' ### zu Inhalt von strTest Response.Write (strEmail & " = Keine Email Adresse!") End If Response.Write("<br>" & vbcrlf) End Function %> Das Ergebnis dieses Scripts ist wie folgt: webmaster@aspheute.de = Email Adresse! a@b.c = Keine Email Adresse! master@the.universe = Email Adresse! Das RegExp Objekt ist sozusagen das Werkzeug, mit dessen Hilfe man eine Zeichenkette auf die Übereinstimmung mit einem bestimmten Textmuster (Pattern) durchsuchen kann. Das Textmuster setzt man, indem man der Pattern Eigenschaft des RegExp Objektes einen regulären Ausdruck zuweist. Dieser Ausdruck (im Beispiel "^.+@.+\...+$") enthält (auf den ersten Blick schwer lesbar) eine Beschreibung (Muster), wie eine "zutreffende" Textstelle auszusehen hat. Ein ausführliche Beschreibung von Pattern finden Sie unter Suchmuster (Pattern) Um nun eine Zeichenkette nach Textstellen zu durchsuchen die zum Suchmuster (Pattern) passen, kann man die Execute Methode des RegExp Objekts benutzen. Execute liefert als Ergebnis eine sogenannte Matches Collection (alle Treffer) zurück. Die einzelnen Objekte der Matches Collection sind die Match (Treffer) Objekte. Diese enthalten Informationen über jene Textstellen, die zum regulären Ausdruck (Pattern Eigenschaft des RegExp Objektes) passen: Position der Textstelle in der Zeichenkette, Länge der passenden Textstelle, den Wert der Textstelle (also der passende Ausschnitt aus der Zeichenkette). Die Count Eigenschaft der Matches Collection enthält einfach nur die Anzahl der passenden Textstellen (also die Anzahl der Match Objekte). In den folgenden Absätzen möchte ich auf die Möglichkeiten eingehen, die man bei der Definition eines Suchmusters (Pattern) hat. Suchmuster (Pattern)Das Wesen des regulären Ausdruckes "^.+@.+\...+$" ist ein wenig komplexer, ich werde die Einzelheiten später genauer erläutern. Zuerst ein kurzer Überblick über die wichtigsten Sonderzeichen, die man in regulären Ausdrücken verwendet:
Die Aufzählung der vorhergehenden Tabelle ist nicht vollständig. Allerdings enthält die VBScript Dokumentation die vollständige Liste. Um noch einmal zum Ausdruck des ASP Listings zurückzukommen. Die Bedeutung der einzelnen Teile des Ausdrucks "^.+@.+\...+$" lautet wie folgt:
Die Replace Methode des RegExp ObjektesMit Hilfe der Replace Methode kann man eine Zeichenkette nach bestimmten Textmustern (Pattern) durchsuchen, und die gefundenen Textstellen durch einen anderen Text ersetzen. Die Verwendung ist wie folgt: <% Set objRegAusdr = New RegExp ' ### Setzten des Suchmusters (Pattern) objRegAusdr.Pattern = "ist" ' ### Alle Pattern austauschen objRegAusdr.Global = True strA = "Dies ist ein Test." strB = "war" ' ### Alle Pattern in strA gegen strB austauschen strA = objRegAusdr.Replace(strA, strB) Response.Write(strA) %> Nachdem das RegExp Objekt generiert und die Suchpattern gesetzt sind, kann man in einer beliebigen Zeichenkette (strA) die zum Suchmuster passenden Textstellen gegen eine andere Zeichenkette (strB) austauschen. Dadurch, daß die Global Eigenschaft des RegExp Objektes auf True gesetzt ist werden alle Textstellen, die zum Pattern passen ausgetauscht. Hätte Global den Wert False, so würde nur die erste passende Textstelle ausgetauscht werden Die Test Methode des RegExp ObjektesMit Hilfe der Test Methode lässt sich feststellen, ob die Pattern ein- oder mehrmals in einer Zeichenkette vorkommen. Dies illustriert das folgende Beispiel. <% Set objRegAusdr = New RegExp ' ### Setzten des Suchmusters (Pattern) objRegAusdr.Pattern = "ist" strA = "Dies ist ein Test." ' ### Alle Pattern in strA gegen strB austauschen boolGefunden = objRegAusdr.Test(strA) If boolGefunden = True Then Response.Write("Pattern in Text gefunden!") Else Response.Write("Pattern nicht gefunden!") End If %> Die Matches (Treffer) CollectionDie Matches Collection enthält alle Textstellen einer Zeichenkette, die zu den Pattern des RegExp Objektes passen. Die Matches Collection erhält man, indem man ein RegExp Objekt erstellt, die Pattern setzt und dann die Execute Methode des RegExp Objektes ausführt.
objRegAusdr = New RegExp ... Set Matches = objRegAusdr.Execute(strMatchString) Man kann dann die Collection durchlaufen, zum Beispiel in einer For Each ... Next Schleife, und die folgenden Informationen zu jeder gefundenen Textstelle auslesen: Position des passenden Textes, genauer Text an der Fundstelle, Länge des passenden Textes.
... For Each Match in Matches ... Next Dazu stellt jedes Match Objekt der Matches Collection die folgenden Eigenschaften zur Verfügung:
... For Each Match in Matches Response.Write("FirstIndex: ") Response.Write(Match.FirstIndex & "<br>") Response.Write("Value: ") Response.Write(Match.Value & "<br>") Response.Write("Length: " Response.Write(Match.Length & "<br>") Response.Write("<br>" & vbcrlf) Next SchlußbemerkungReguläre Ausdrücke und das RegExp Objekt erlauben ein effizientes Suchen nach spezifischen Textstellen in einer Zeichenkette. Mit Hilfe der Replace Methode kann man darüber hinaus in einem Text auf sehr bequeme Weise definierte Textstellen durch einen anderen Text ersetzen. Verwandte Artikel
Eigene Tags - User Input einfach und sicher Links zu anderen Sites
VBScript Engine (deutsch) Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |