Prüft, ob ein String dem Suchmuster eines regulären Ausdrucks entspricht.
StringRegExp ( "test", "pattern" [, flag ] [, offset ] ] )
Parameter
| test | Der zu prüfende String. |
| pattern | Das Suchmuster des regulären Ausdrucks. |
| flag | [optional] Eine Zahl, die die Verhaltensweise der Funktion bestimmt. Siehe weiter unten für Details. Der Standard ist 0. |
| offset | [optional] Die Position des Strings, wo die Funktion beginnen soll (startet bei 1). Der Standard ist 1. |
| Flag | Werte |
| 0 | Gibt 1 (passend) oder 0 (nicht passend) zurück. |
| 1 | Gibt ein Array mit der ersten Übereinstimmung zurück. |
| 2 | Gibt ein Array mit den Übereinstimmungen zurück inkl. der vollständigen Übereinstimmung (Perl / PHP Stil). |
| 3 | Gibt ein Array mit den globalen Übereinstimmungen zurück. |
| 4 | Gibt ein Array mit den globalen Übereinstimmungen zurück inkl. der vollständigen Übereinstimmung (Perl / PHP Stil). |
Rückgabewert
Flag = 0 :| @Error | Bedeutung |
| 2 | Falsches Muster. @Extended = Offset des Fehlers im Muster. |
| @Error | Bedeutung |
| 0 | Array ist gültig. @Extended für die weiteren Offsets überprüfen. |
| 1 | Array ist ungültig. Keine Übereinstimmungen. |
| 2 | Falsches Suchmuster, Array ist ungültig. @Extended = Offset des Fehlers im Muster. |
| @Error | Bedeutung |
| 0 | Array ist gültig. |
| 1 | Array ist ungültig. Keine Übereinstimmungen. |
| 2 | Falsches Suchmuster, Array ist ungültig. @Extended = Offset des Fehlers im Muster. |
Bemerkungen
Reguläre Ausdrücke sind eine kompakte Art, ein Suchmuster für zu suchende Strings anzugeben. Reguläre Ausdrücke sind Strings, in denen einfache Textzeichen angeben, welcher Text in dem Zielstring existieren muss. Einige Zeichen haben eine besondere Bedeutung, um anzugeben, welche Variabilität in dem Zielstring erlaubt ist. Für reguläre Ausdrücke in AutoIt ist normalerweise die Groß-/Kleinschreibung relevant.| [ ... ] | Findet jedes Zeichen in dem Set. [aeiou] findet alle kleingeschriebenen Vokale. Ein zusammenhängendes Set kann definiert werden, indem ein Strich zwischen dem ersten und letzten Zeichen gesetzt wird. [a-z] findet alle kleingeschriebenen Zeichen. Um einen Strich in einem Set einzubeziehen (-), ist der Strich als erstes oder letztes Zeichen des Sets zu verwenden. Um eine schließende Klammer im Set zu verwenden, ist es als erstes Zeichen im Set zu verwenden. [][] findet alle [ oder ]. Es ist zu beachten, das Sonderzeichen ihre ursprüngliche Bedeutung im Set verlieren; mit Ausnahme von \\, \^, \-, \[ und \], die dem vorangestellten Backslash innerhalb des Sets folgen (Fachbegriff "escapen"). |
| [^ ... ] | Findet alle Zeichen welche nicht im Set enthalten sind. [^0-9] findet alles außer Ziffern. Um ein Caret (^) ins Set einzubinden, muss es nach dem Anfang des Sets stehen oder seine durch einen Backslash seine Bedeutung aufgehoben werden(\^). |
| [:class:] | Findet ein Zeichen aus der gegebenen Klasse. Gültige Klassen siehe unten unter "Zeichenklassen": Also ist [0-9] equivalent zu [[:digit:]], welches wiederum equivalent zu \d ist. |
| [^:class:] | Findet alle Zeichen welche nicht in der Klasse vertreten sind, aber nur wenn ^ das erste Zeichen ist. |
| ( ... ) | Gruppe. Die Elemente in der Gruppe werden in Reihenfolge bearbeitet und können zusammen wiederholt werden. (ab)+ entspricht "ab" oder "abab", aber nicht "aba". Eine Gruppe speichert auch den Text ab, der mit dem Set übereinstimmt, um ihn bei einem Rückverweis und in dem Rückgabearray der Funktion zu benutzen, abhängig von dem Flag-Parameter. |
| Der Inhalt der Gruppe wird überschrieben, sobald ein Wiederholungszeichen auf die Gruppe angewandt wird. | |
| (?i) | Bei der Auswertung des regulären Ausdrucks wird nach dem Flag nicht zwischen Groß-/Kleinschreibung unterschieden. Dies wird nicht als Gruppe behandelt. |
| (?-i) | (Standard) Bei der Auswertung des regulären Ausdrucks wird nach dem Flag zwischen Groß-/Kleinschreibung unterschieden. Dies wird nicht als Gruppe behandelt. |
| (?i ... ) | Bei der Auswertung des regulären Ausdrucks wird bei der Suche innerhalb der Gruppe nicht zwischen Groß-/Kleinschreibung unterschieden. Es verhält sich wie eine normale Gruppe. |
| (?-i ... ) | Bei der Auswertung des regulären Ausdrucks wird bei der Suche innerhalb der Gruppe zwischen Groß-/Kleinschreibung unterschieden. Es verhält sich wie eine normale Gruppe. |
| (?: ... ) | Jedes gruppierte Elemente wird standardmäßig in ein neues Subpattern geschrieben. Durch ?: wird dies verhindert (Nicht-aufzeichnende Gruppe) |
| (?i: ... ) | Bei der Auswertung des regulären Ausdrucks wird bei der Suche innerhalb der Gruppe nicht zwischen Groß-/Kleinschreibung unterschieden. Es verhält sich wie eine nicht-aufzeichnende Gruppe. |
| (?-i: ... ) | Bei der Auswertung des regulären Ausdrucks wird bei der Suche innerhalb der Gruppe zwischen Groß-/Kleinschreibung unterschieden. Es verhält sich wie eine nicht-aufzeichnende Gruppe. |
| (?# ... ) | Erlaubt es, Kommentare in das Suchmuster einzufügen. Hierfür wird der Parameter (?x) benötigt. |
| (?m) | ^ und $ finden Zeilenschaltungen innerhalb der Datenmenge. |
| (?s) | "." findet alle Zeichen, auch eine Zeilenumbrüche (als Standard findet "." keine Zeilenumbrüche). |
| (?x) | Ignoriert Whitespace-Zeichen und # Kommentare. |
| (?U) | Kehrt die Standardeinstellung für Gierigkeit der Quantifzierer um (siehe auch ?). |
| (?<=...) | prüft, was vor der Übereinstimmung stehen darf. |
| (?=...) | prüft, was nach der Übereinstimmung stehen darf. |
| (?"<"!...) ("" entfernen, notwendig wegen Darstellungsproblemen) | prüft, was vor der Übereinstimmung nicht stehen darf. |
| (?!...) | prüft, was nach der Übereinstimmung nicht stehen darf. |
| ...{1} | darf 1-mal auftreten. Die Gruppe oder das Zeichen, das auftreten darf vor die geschweifte Klammer. Die Anzahl in die geschweifte Klammer. Siehe Wiederholungszeichen |
| . | Findet jedes einzelne Zeichen (außer Zeilenumbrüche). |
| | | Oder. Der Ausdruck auf der einen Seite oder auf der anderen Seite wird gefunden. |
| \ | Schaltet ein Sonderzeichen aus (das Sonderzeichen wird dann als Zeichen gefunden) oder schaltet ein Sonderzeichentyp ein (Fachbegriff "escapen" o. "maskieren"). |
| \\ | Findet alle tatsächlichen Backslashs (\). |
| ^ | Außerhalb einer Zeichenklasse (Set) findet dieses Zeichen einen Zeilenanfang. Hierfür muss (?m) als zusätzlicher Parameter genutzt werden. wird (?m) nicht genutzt, steht dieses Zeichen für den Anfang der Datenmenge und ist equivalent zu \A |
| $ | Findet ein Zeilenende innerhalb der Datenmenge. Hierfür muss, wie auch bei ^, der Parameter (?m) genutzt werden. |
| \a | Alarmzeichen, gleich dem Kontrollzeichen BEL (chr(7)). |
| \A | Findet nur am Anfang des Strings. |
| \b | Findet an der Wortgrenze. |
| \B | Findet alles außer an der Wortgrenze. |
| \c | Findet ein Kontrollzeichen, basierend auf dem nächsten Zeichen. Zum Beispiel, \cM entspricht Strg-M. |
| \d | Findet eine Ziffer (0-9). |
| \D | Findet alles außer Ziffern. |
| \e | Findet ein Escape-Zeichen (chr(27)). |
| \E | Beendet ein Zitat. Siehe \Q |
| \f | Findet das Kontrollzeichen Seitenvorschub(chr(12)). |
| \h | Alle waagerechten Whitespace-Zeichen. |
| \H | Alle Zeichen, die keine waagerechten Whitespace-Zeichen sind. |
| \n | Findet einen Zeilenvorschub(@LF, chr(10)). |
| \Q | Zitat, d.h. alle Sonderzeichen/Suchmuster bis zum nächsten \E werden als normale Zeichen behandelt. |
| \r | Findet ein Wagenrücklaufzeichen (@CR, chr(13)). |
| \s | Findet alle Leerzeichentypen: Chr(9) bis Chr(13), welche Tabulator, Zeilenschaltung, senkrechter Tab, Seitenvorschub, Wagenrücklauf und das Leerzeichen sind ( Chr(32) ). |
| \S | Findet alles außer Leerzeichentypen. |
| \t | Findet einen Tabulator (chr(9)). |
| \v | Jede vertikale Leerzeichentypen. |
| \V | Jedes Zeichen außer vertikale Leerzeichentypen. |
| \w | Findet Buchstaben: a-z, A-Z ,0-9 oder Unterstrich (_). |
| \W | Findet alles außer Buchstaben. |
| \### | Findet ASCII Zeichen, dessen Code angegeben ist, oder das über einen Rückverweis angegeben ist. Kann bis zu 3 Oktalziffern beinhalten. Findet Rückverweise falls vorhanden. Findet die Gruppe mit der höchsten Priorität. Zum Beispiel würde ([[:alpha:]])\1 doppelte Buchstaben finden. |
| \x## | Findet ASCII Zeichen, deren Code hexadezimal angegeben ist. Kann aus bis zu 2 Hex-Ziffern bestehen. |
| \z | Findet Zeichen nur am Ende des Strings. |
| \Z | Findet Zeichen nur am Ende eines Strings oder vor einer neuen Zeile am Ende. |
| {x} | Wiederholt die bisherigen Zeichen, Sets oder Gruppen genau x mal. |
| {x,} | Wiederholt die bisherigen Zeichen, Sets oder Gruppen mindestens x mal. |
| {0,x} | Wiederholt die bisherigen Zeichen, Sets oder Gruppen höchstens x mal. |
| {x, y} | Wiederholt die bisherigen Zeichen, Sets oder Gruppen zwischen x und inklusive y mal. |
| * | Wiederholt die bisherigen Zeichen, Sets oder Gruppen kein oder mehrmals. Äquivalent zu {0,} |
| + | Wiederholt die bisherigen Zeichen, Sets oder Gruppen mindestens einmal. Äquivalent zu {1,} |
| ? | Die bisherigen Zeichen, Sets oder Gruppen dürfen höchstens einmal auftreten. Äquivalent zu {0, 1} |
| ? (nach Wiederholungszeichen) | Sucht die kürzeste passende Stelle anstatt der längsten. Standarmäßig sind Wiederholungszeichen gierig und geben die längste Stelle zurück. Durch das ? wird die kürzeste Stelle zurückgegeben. |
| [:alnum:] | Buchstaben und Ziffern. |
| [:alpha:] | Buchstaben. |
| [:ascii:] | Zeichencodes 0 - 127. |
| [:blank:] | Leerzeichen oder Tabulator. |
| [:cntrl:] | Steuerungszeichen. |
| [:digit:] | dezimale Ziffern (gleich wie \d). |
| [:graph:] | druckbare Zeichen, ohne Leerzeichen. |
| [:lower:] | Kleinbuchstaben. |
| [:print:] | druckbare Zeichen, samt Leerzeichen. |
| [:punct:] | druckbare Zeichen, ohne Buchstaben und Ziffern. |
| [:space:] | Leerzeichentypen (nicht exakt das gleiche wie \s, \s findet auch VT: chr(11)). |
| [:upper:] | Großbuchstaben. |
| [:word:] | Buchstaben (genauso wie \w). |
| [:xdigit:] | hexadezimale Ziffern. |
Verwandte Funktionen
StringInStr, StringRegExpReplace
Beispiel
; Option 1, Verwendung eines Offsets
$nOffset = 1
While 1
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 1, $nOffset)
If @error = 0 Then
$nOffset = @extended
Else
ExitLoop
EndIf
For $i = 0 To UBound($array) - 1
MsgBox(0, "RegExp-Test mit Option 1 - " & $i, $array[$i])
Next
WEnd
; Option 2, einfacher Rückgabewert, php/preg_match()-Stil
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 2)
For $i = 0 To UBound($array) - 1
MsgBox(0, "RegExp Test mit Option 2 - " & $i, $array[$i])
Next
; Option 3, globale Rückgabe, alter AutoIt-Stil
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 3)
For $i = 0 To UBound($array) - 1
MsgBox(0, "RegExp-Test mit Option 3 - " & $i, $array[$i])
Next
; Option 4, globale Rückgabe, php/preg_match_all()-Stil
$array = StringRegExp('F1oF2oF3o', '(F.o)*?', 4)
For $i = 0 To UBound($array) - 1
$match = $array[$i]
For $j = 0 To UBound($match) - 1
MsgBox(0, "RegExp-Test mit Option 4 - " & $i & ',' & $j, $match[$j])
Next
Next
#include <Array.au3>
; Die folgenden Beispiele sind nur in der deutschen Hilfe enthalten
; *************************************************************************************************************************************************************
; Beispiel 1
; ----------------- Anwendung von Wiederholungszeichen
; Suchmuster:
; 2x Zahl
; 1x .
; 2x Zahl
; 1x .
; 4x Zahl
Dim $array[2]
$array[0] = "23.08.2010"
$array[1] = "23.08.10"
For $i = 0 To UBound($array) - 1
$regexp = StringRegExp($array[$i], "\d{2}\.\d{2}\.\d{4}", 3)
_ArrayDisplay($regexp, $array[$i])
Next
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 2
; ----------------- Anwendung von Wiederholungszeichen
; Suchmuster:
; 1x "P"
; mindestens 1x "a"
; 1x "r"
Dim $array[2]
$array[0] = "Ich habe 10 Paaaaaar zu Hause"
$array[1] = "Ich habe 10 Par zu Hause"
For $i = 0 To UBound($array) - 1
$regexp = StringRegExp($array[$i], "Pa+r", 3) ;alternativ: Pa{1,}r
_ArrayDisplay($regexp, $array[$i])
Next
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 3
; ----------------- Anwendung von Oder und ?:
; Suchmuster:
; "-XY" ODER " XY" (?:\-XY| XY) >>> durch ?: wird nicht nur das Ergebnis der Oder-Bedingung sondern auch der Rest im Array ausgegeben
; DANN Zahlen (beliebige Anzahl) \d*
; DANN "-" \-
Dim $array[2]
$array[0] = "425-65-XY4587543-ghzgt7"
$array[1] = "4 25-65 XY4587543-ghzgt7"
For $i = 0 To UBound($array) - 1
$regexp = StringRegExp($array[$i], "(?:\-XY| XY)\d*\-", 3)
_ArrayDisplay($regexp, $array[$i])
Next
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 4
; ----------------- Anwendung von ?<!
; Suchmuster:
; alles außer "142"
; DANN "Hallo"
Dim $array[2]
$array[0] = "142Hallo"
$array[1] = "412Hallo"
For $i = 0 To UBound($array) - 1
$regexp = StringRegExp($array[$i], "(?<!142)(Hallo)", 3)
_ArrayDisplay($regexp, $array[$i])
Next
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 5
; ----------------- Anwendung von \b
; Durch das Voranstellen von \b und das anhängen von \b an das Ende wird nur an der Wortgrenze gesucht.
; "Abgrund oder folge" wird nicht gefunden, da das Wort Abgrund und nicht Grund heisst
$sString = _
"Grund oder Folge der Armut?" & @CRLF & _
"Fahre ich in den Abgrund oder folge ich der Straße?"
$aResult = StringRegExp($sString, "(?i)\bgrund oder folge\b", 3)
_ArrayDisplay($aResult, "StringRegExp Results")
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 6
; ----------------- Rückgabeformen
; Hier ein kleines Script, nur um die verschiedenen Rückgabeformen zu verdeutlichen:
$sString = _
'<td><img src="img/x.gif" class="r1" alt="Holz" title="Holz"></td>' & @CRLF & _
'<td id="l4" title="600">132411/240000</td>' & @CRLF & _
'<td><img src="img/x.gif" class="r2" alt="Lehm" title="Lehm"></td>' & @CRLF & _
'<td id="l3" title="600">168007/240000</td>' & @CRLF & _
'<td><img src="img/x.gif" class="r3" alt="Eisen" title="Eisen"></td>' & @CRLF & _
'<td id="l2" title="750">32743/240000</td>' & @CRLF & _
'<td><img src="img/x.gif" class="r4" alt="Getreide" title="Getreide"></td>' & @CRLF & _
'<td id="l1" title="79">78451/240000</td>'
$aFlag1 = StringRegExp($sString, "l[1-4][^>]+>(\d+\/\d+)", 1)
$aFlag2 = StringRegExp($sString, "l[1-4][^>]+>(\d+\/\d+)", 2)
$aFlag3 = StringRegExp($sString, "l[1-4][^>]+>(\d+\/\d+)", 3)
$aFlag4 = StringRegExp($sString, "l[1-4][^>]+>(\d+\/\d+)", 4)
MsgBox(0, "", "Flag 0 gibt 1 (matched) oder 0 (no match) zurück.")
MsgBox(0, "Flag 0", StringRegExp($sString, "l[1-4][^>]+>(\d+\/\d+)"))
MsgBox(0, "", "Flag 1 zeigt das erste Match (nur Subpatterns)")
_ArrayDisplay($aFlag1, "Flag 1")
MsgBox(0, "", "Flag 2 zeigt das erste Match (Full Match + Subpatterns)")
_ArrayDisplay($aFlag2, "Flag 2")
MsgBox(0, "", "Flag 3 zeigt alle Matches (nur Subpatterns)")
_ArrayDisplay($aFlag3, "Flag 3")
MsgBox(0, "", "Flag 4 gibt einen Array voller Arrays zurück.")
_ArrayDisplay($aFlag4, "Flag 4")
MsgBox(0, "", "Die einzelnen Arrays beinhalten Full Match + Subpatterns." & @CRLF & _
"Leider kann man Arrays in Arrays nicht direkt ansprechen" & @CRLF & _
"(ohne sie zwischenzuspeichern), deswegen benutze ich statt Flag 4 immer Flag 3." & @CRLF & _
"Hier mal alle Arrays in $aFlag4:")
For $i = 0 To UBound($aFlag4) - 1
$aDummy = $aFlag4[$i]
_ArrayDisplay($aDummy, "$aFlag4[" & $i & "]")
Next
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 7
; ----------------- Anwendung von gierigen und faulen Wiederholungszeichen
; Das erste * ist gierig. Es wird die längste Stelle gesucht
$aRegExp = StringRegExp("Die Abkürzung 'ISP' heißt 'Internet Service Provider'.", ".*'(.*)'.*", 3)
_ArrayDisplay($aRegExp)
; Durch anhängen eines ? wird es faul und es wird die kürzeste Stelle gesucht
$aRegExp = StringRegExp("Die Abkürzung 'ISP' heißt 'Internet Service Provider'.", ".*?'(.*?)'.*", 3)
_ArrayDisplay($aRegExp)
; Das erste * ist gierig. Es wird die längste Stelle gesucht
$aRegExp = StringRegExp("12-34.abc.def@mail.de", "(.*)\.(.*)*@(.*)\.(.*)", 3)
_ArrayDisplay($aRegExp)
; Durch anhängen eines ? wird es faul und es wird die kürzeste Stelle gesucht
$aRegExp = StringRegExp("12-34.abc.def@mail.de", "(.*?)\.(.*)*@(.*)\.(.*)", 3)
_ArrayDisplay($aRegExp)
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 8
; ----------------- Anwendung von \n
; Das erste Wort (auf welches " Email: " folgt) wird in einer temporären Variable gespeichert (weil eingeklammert)
; Diese Variable wird mit \1 abgerufen. Die 1 steht dabei für die Nummer des Subpatterns.
$sString = "Name Email: Name@web.de" & @CRLF
$sString &= "Name Email: Peter@live.de" & @CRLF
$sString &= "Acanis Email: Acanis@gmx.net" & @CRLF
$sString &= "Acanis Email: Coolertyp@googlemail.com" & @CRLF
$aRegExp = StringRegExp($sString, "(\w+) Email: (\1@\w+\.\w+)", 3)
_ArrayDisplay($aRegExp)
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 9
; ----------------- Anwendung von ?:
; Das folgende Beispiel soll aufzeigen, wie ein Subpattern gespeichert wird und wie nicht.
$sString = "Mein Name ist Peter" & @CRLF
$sString &= "Mein Name ist Karl" & @CRLF
$sString &= "Mein Name ist Max" & @CRLF
; So würde nur das Subpattern zurückgegeben werden
$aResult = StringRegExp($sString, "Mein Name ist (Karl|Max)", 3)
_ArrayDisplay($aResult)
; Durch voranstellen von ?: wird das Subpattern nicht gespeichert und es wird der komplette Satz als Ergebnis zurückgegeben
$aResult = StringRegExp($sString, "Mein Name ist (?:Karl|Max)", 3)
_ArrayDisplay($aResult)
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 10
; ----------------- Verwendung von Subpatterns
; Das folgende Beispiel soll aufzeigen, wie ein Subpattern gespeichert wird und dieses dann später wieder verwendet wird.
$date = '01.03.2008' ; YYYY/MM/DD
$new = StringRegExpReplace($date, "(\d{2})\.(\d{2})\.(\d{4})", "$3/$2/$1")
MsgBox(0, "", $new)
; *************************************************************************************************************************************************************
; *************************************************************************************************************************************************************
; Beispiel 11
; ----------------- Verwendung von Wiederholungszeichen.
; Hier wird der Inhalt der Gruppe überschrieben, sobald ein Wiederholungszeichen auf die Gruppe angewandt wird
$sText = "aaabacad"
$aRet = StringRegExp($sText, "(a.)+", 3)
_ArrayDisplay($aRet)
; *************************************************************************************************************************************************************