RegExMatch() [v1.0.45+]

Überprüft, ob ein Muster (regulärer Ausdruck) in einer Zeichenkette vorkommt.

Fundposition := RegExMatch(Heuhaufen, NadelRegEx , AusgabeVar, Startposition := 1)

Parameter

Heuhaufen

Eine Zeichenkette, deren Inhalt durchsucht werden soll.

NadelRegEx

Ein Muster im PCRE-Format (Perl-kompatibler regulärer Ausdruck), das gesucht werden soll. Die Optionen des Musters (falls vorhanden) müssen am Anfang der Zeichenkette eingefügt werden, gefolgt von einer runden Endklammer. Zum Beispiel würde das Muster "i)abc.*123" die nicht-Groß-/Kleinschreibung-sensitive Option einschalten und nach einer Zeichenkette suchen, die sich zusammensetzt aus "abc", null oder mehr Vorkommen eines beliebigen Zeichens und "123". Wenn es keine Optionen gibt, ist das ")" optional; zum Beispiel wäre ")abc" das gleiche wie "abc".

AusgabeVar

Modus 1 (Standard): Geben Sie ein Variable an, in der eine Zeichenfolge von Heuhaufen gespeichert werden soll, die mit dem gesamten Muster übereinstimmt. Wenn das Muster nicht gefunden werden kann (also wenn die Funktion 0 zurückgibt), wird diese Variable sowie alle dazugehörigen Array-Elemente leer gemacht.

Sind erfassende Teilmuster innerhalb von NadelRegEx vorhanden, werden ihre Übereinstimmungen in ein Pseudo-Array gespeichert, dessen Basisname AusgabeVar ist. Wenn die Variable zum Beispiel Match heißt, würde eine Teilzeichenkette, die mit dem ersten Teilmuster übereinstimmt, in Match1 gespeichert werden, die zweite in Match2 und so weiter. Benannte Teilmuster sind eine Ausnahme - sie werden unter ihrem Namen abgespeichert. Zum Beispiel würde eine Teilzeichenkette, die mit dem benannten Teilmuster "(?P<Jahr>\d{4})" übereinstimmt, in MatchJahr gespeichert werden. Wenn ein bestimmtes Teilmuster keine Übereinstimmung findet (oder die Funktion null zurückgibt), wird die entsprechende Variable leer gemacht.

Um innerhalb einer Funktion ein globales statt lokales Pseudo-Array zu erstellen, muss der Basisname des Pseudo-Arrays (z. B. Match) vor seiner Verwendung als globale Variable deklariert werden. Umgekehrt gilt das gleiche bei Assume-Global-Funktionen. Aufgrund des Häufigen Anlasses zu Verwirrung muss jedes Element einzeln deklariert werden.

Modus 2 (Position und Länge): Wenn ein großes P in den RegEx-Optionen vorhanden ist - z. B. "P)abc.*123") - wird die Länge der kompletten Musterübereinstimmung in AusgabeVar gespeichert (oder 0, wenn nichts gefunden wird). Sind erfassende Teilmuster vorhanden, werden ihre Positionen und Längen in zwei Pseudo-Arrays gespeichert: AusgabeVarPos und AusgabeVarLen. Wenn der Basisname der Variable zum Beispiel Match ist, würde die einsbasierte Position der ersten Teilmusterübereinstimmung in MatchPos1 gespeichert werden, und ihre Länge in MatchLen1 (beide sind null, wenn das Teilmuster nicht gefunden wurde oder die Funktion eine 0 zurückgibt). Benannte Teilausdrücke sind eine Ausnahme - sie werden unter ihrem Namen abgespeichert (z. B. MatchPosJahr und MatchLenJahr).

Modus 3 (Match-Objekt) [v1.1.05+]: Wenn ein großes O in den RegEx-Optionen vorhanden ist - z. B. "O)abc.*123" - wird ein Match-Objekt in AusgabeVar gespeichert. Mit diesem Objekt kann die Position, Länge und der Wert der gesamten Übereinstimmung sowie von jedem erfassten Teilmuster abgerufen werden, sofern vorhanden.

Startposition

Fehlt Startposition, gilt standardmäßig 1 (das erste Zeichen von Heuhaufen). Ansonsten kann eine 2 angegeben werden, um beim zweiten Zeichen zu beginnen, eine 3, um beim dritten Zeichen zu beginnen, und so weiter. Wenn Startposition die Länge von Heuhaufen überschreitet, beginnt die Suche bei einer leeren Zeichenkette am Heuhaufen-Ende (wodurch keine Übereinstimmung gefunden werden kann).

Wenn Startposition kleiner als 1 ist, gilt sie als Offset vom Heuhaufen-Ende. Zum Beispiel würde 0 beim letzten Zeichen und -1 beim vorletzten Zeichen beginnen. Wenn Startposition das linke Heuhaufen-Ende überschreiten will, wird der gesamte Heuhaufen durchsucht.

Egal welchen Wert man als Startposition verwendet - der Rückgabewert ist immer relativ zum ersten Heuhaufen-Zeichen. Zum Beispiel wäre die Position von "abc" in "123abc789" immer 4.

Rückgabewert

Diese Funktion gibt die Position von NadelRegEx zurück, das ganz links in der Heuhaufen-Zeichenkette vorkommt. Position 1 ist das erste Zeichen. Eine 0 wird zurückgegeben, wenn der Ausdruck nicht gefunden wird. Falls ein Fehler auftritt (z. B. ein Syntaxfehler innerhalb von NadelRegEx), wird eine leere Zeichenkette zurückgegeben und ErrorLevel auf einen der unteren Werte gesetzt, anstatt auf 0.

ErrorLevel

[v1.1.04+]: Diese Funktion ist in der Lage, bei Misserfolg eine Ausnahme auszulösen (nicht zu verwechseln mit "keine Übereinstimmung gefunden"). Weitere Informationen finden Sie unter Laufzeitfehler.

ErrorLevel kann folgendes enthalten:

Optionen

Unter den Optionen finden Sie Modifikatoren wie z. B. "i)abc", der die Groß-/Kleinschreibung-Sensitivität im Muster "abc" ausschalten würde.

Match-Objekt [v1.1.05+]

Wenn ein großes O in den RegEx-Optionen vorhanden ist, wird ein Match-Objekt in AusgabeVar gespeichert. Dieses Objekt hat die folgenden Eigenschaften:

Match.Pos(N): Gibt die Position der gesamten Übereinstimmung oder eines erfassten Teilmusters zurück.

Match.Len(N): Gibt die Länge der gesamten Übereinstimmung oder eines erfassten Teilmusters zurück.

Match.Value(N): Gibt die gesamte Übereinstimmung oder ein erfasstes Teilmuster zurück.

Match.Name(N): Gibt den Namen eines Teilmusters zurück, sofern es einen hat.

Match.Count(): Gibt die Anzahl von allen Teilmustern zurück.

Match.Mark(): Gibt den NAMEN des zuletzt gefundenen (*MARK:NAMEN) zurück, sofern zutreffend.

Match[N]: Wenn N eine 0 oder Nummer/Name eines gültigen Teilmusters ist, dann ist dies das gleiche wie Match.Value(N). Ansonsten kann N der Name von einer der oben genannten Eigenschaften sein. Zum Beispiel wären Match["Pos"] und Match.Pos das gleiche wie Match.Pos(); existiert aber ein Teilmuster namens "Pos", wären sie das gleiche wie Match.Value("Pos").

Match.N: Das gleiche wie oben, außer dass N ein Name ohne Anführungszeichen oder eine Zahl ist.

Bei allen oben genannten Eigenschaften kann N folgendes sein:

Eckige Klammern können anstelle von runden Klammern verwendet werden, wenn N angegeben wurde.

Performance

Um eine einfache Teilzeichenkette innerhalb einer größeren Zeichenkette zu suchen, nutzt man InStr(), weil es schneller als RegExMatch() ist.

Um die Performance zu verbessern, werden die 100 zuletzt verwendeten regulären Ausdrücke zwischengespeichert (in kompilierter Form).

Die S-Option kann manchmal die Performance eines regulären Ausdrucks verbessern, der häufig verwendet wird (z. B. in einer Schleife).

Bemerkungen

Man kann einem Teilmuster einen Namen geben, wie z. B. das Wort Jahr in dem Muster "(?P<Jahr>\d{4})". Solche Namen können maximal aus 32 alphanumerischen Zeichen und Unterstriche bestehen. Die folgende Einschränkung gilt nicht für den O-Modus (Match-Objekt): Zwar sind, während der RegEx-Operation selbst, benannte Teilmuster auch über ihre Nummern verfügbar (z. B. ist \1 eine Rückreferenz zu der gefundenen Zeichenkette im ersten erfassenden Teilmuster), allerdings werden sie nur unter ihrem Namen (nicht unter ihrer Nummer) in das Ausgabe-Pseudo-Array abgespeichert. Wenn das erste Teilmuster zum Beispiel "Jahr" heißt, würde AusgabeVarJahr die gefundene Teilzeichenkette enthalten, und AusgabeVar1 unverändert bleiben (der vorherige Wert bleibt erhalten, sofern vorhanden). Erfolgt aber ein unbenanntes Teilmuster nach "Jahr", würde es in AusgabeVar2 gespeichert werden, und nicht in AusgabeVar1.

Die meisten Zeichen wie abc123 können direkt in einem regulären Ausdruck verwendet werden. Bei den Zeichen \.*?+[{|()^$ muss man allerdings einen umgekehrten Schrägstrich davorsetzen, um sie als direkt geschriebenen Text zu behandeln. Zum Beispiel wäre \. ein direkt geschriebener Punkt und \\ ein direkt geschriebener umgekehrter Schrägstrich. Mithilfe von \Q...\E kann eine komplette Zeichenkette angegeben werden, ohne darin ein Zeichen mit einem umgekehrten Schrägstrich versehen zu müssen. Zum Beispiel: \QDirekt geschriebener Text\E.

Innerhalb eines regulären Ausdrucks kann bei bestimmten Sonderzeichen wie Tab und Newline das verwendete Escapezeichen sowohl ein umgekehrtes Häkchen (`) als auch ein umgekehrter Schrägstrich (\) sein. Zum Beispiel wäre `t das gleiche wie \t, sofern die x-Option nicht verwendet wird.

Um die Grundlagen von regulären Ausdrücken kennenzulernen (oder das Gedächtnis ein wenig aufzufrischen), siehe RegEx-Kurzübersicht.

AutoHotkey's reguläre Ausdrücke wurden mittels Perl-kompatible reguläre Ausdrücke (PCRE) von www.pcre.org implementiert.

[AHK_L 31+]: Innerhalb eines Ausdrucks kann a ~= b als Ersatz für RegExMatch(a, b) genutzt werden.

Siehe auch

RegExReplace(), RegEx-Kurzübersicht, Callouts in regulären Ausdrücken, InStr(), IfInString, StringGetPos, SubStr(), SetTitleMatchMode RegEx, Global matching and Grep (Forum-Link)

Häufige Quellen von Textdaten: FileRead, UrlDownloadToFile, Clipboard, GUI-Eingabefelder

Beispiele

Fundposition := RegExMatch("xxxabc123xyz", "abc.*xyz")  ; Gibt 4 zurück, weil das die Position ist, auf der die Übereinstimmung gefunden wurde.
Fundposition := RegExMatch("abc123123", "123$")  ; Gibt 7 zurück, weil durch $ die Übereinstimmung am Ende vorkommen muss.
Fundposition := RegExMatch("abc123", "i)^ABC")  ; Gibt 1 zurück, weil eine Übereinstimmung aufgrund der nicht-Groß-/Kleinschreibung-sensitiven Option möglich gemacht wurde.
Fundposition := RegExMatch("abcXYZ123", "abc(.*)123", Teilmuster)  ; Gibt 1 zurück und speichert "XYZ" in Teilmuster1.
Fundposition := RegExMatch("abc123abc456", "abc\d+", "", 2)  ; Gibt 7 statt 1 zurück, wegen einer 2 als Startposition.

; Allgemeine RegEx-Beispiele können in der RegEx-Kurzübersicht gefunden werden.