Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Reguläre Ausdrücke / Regular Expressions

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

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 5

Unter 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 Objektes

Mit 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 Objektes

Mit 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) Collection

Die 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ßbemerkung

Regulä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.

This printed page brought to you by AlphaSierraPapa

Verwandte Artikel

Eigene Tags - User Input einfach und sicher
http:/www.aspheute.com/artikel/20020130.htm
Gegengifte für SQL Injection
http:/www.aspheute.com/artikel/20011031.htm
Meta Tags von fremden Seiten parsen
http:/www.aspheute.com/artikel/20010803.htm
Regex'en zu Assemblies kompilieren
http:/www.aspheute.com/artikel/20020902.htm
Verhinderung von SQL Injection Marke .NET
http:/www.aspheute.com/artikel/20011203.htm

Links zu anderen Sites

VBScript Engine (deutsch)
http://www.microsoft.com/msdownload/vbscript/scripting.asp?id=11
VBScript Engine (US)
http://www.microsoft.com/msdownload/vbscript/scripting.asp

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.