RegExMatch

Prüft, ob ein Suchmuster (regulärer Ausdruck) in einer Zeichenkette vorkommt.

FundPos := RegExMatch(Heuhaufen, NadelRegEx , &AusgabeVar, StartPos)

Parameter

Heuhaufen

Typ: Zeichenkette

Eine Zeichenkette, die durchsucht werden soll. Kann eine binäre Null enthalten.

NadelRegEx

Typ: Zeichenkette

Ein Suchmuster im PCRE-Format (Perl-kompatibler regulärer Ausdruck). Die Optionen des Suchmusters (falls vorhanden) müssen am Anfang der Zeichenkette stehen, gefolgt von einem ")"-Zeichen. Das Suchmuster i)abc.*123 beispielsweise deaktiviert die Groß-/Kleinschreibung-Sensitivität und sucht nach einer Zeichenkette, die sich zusammensetzt aus "abc", null oder mehr Vorkommen eines beliebigen Zeichens und "123". Wenn keine Optionen vorhanden sind, ist das ")"-Zeichen optional. Zum Beispiel ist )abc dasselbe wie abc.

NadelRegEx kann keine binären Nullen enthalten, aber \x00 kann als Platzhalter für eine binäre Null in Heuhaufen verwendet werden.

&AusgabeVar

Typ: VarRef

Wenn weggelassen, wird keine Ausgabevariable verwendet. Andernfalls geben Sie eine Referenz an, die auf eine Ausgabevariable verweist, in der das Match-Objekt gespeichert werden soll. Dieses Objekt kann verwendet werden, um die Position, die Länge und den Wert der gesamten Übereinstimmung und, falls vorhanden, jedes erfassten Teilsuchmusters abzurufen.

Wenn das Suchmuster nicht gefunden wird (also wenn die Funktion 0 zurückgibt), wird diese Variable leer gemacht.

StartPos

Typ: Integer

Wenn weggelassen, wird standardmäßig 1 verwendet (der Anfang von Heuhaufen). Andernfalls geben Sie 2 an, um beim zweiten Zeichen zu beginnen, 3, um beim dritten zu beginnen, und so weiter. Wenn StartPos die Länge von Heuhaufen überschreitet, beginnt die Suche bei der leeren Zeichenkette am Ende von Heuhaufen (was in der Regel zu keiner Übereinstimmung führt).

Geben Sie eine negative StartPos an, um an dieser Position von rechts zu beginnen. Zum Beispiel kann -1 angegeben werden, um beim letzten Zeichen zu beginnen, -2, um beim vorletzten Zeichen zu beginnen, und so weiter. Wenn StartPos über das linke Ende von Heuhaufen hinausgeht, wird alles in Heuhaufen durchsucht.

Geben Sie 0 an, um am Ende von Heuhaufen zu beginnen, d.h. an der Position rechts vom letzten Zeichen. Dies kann mit nullbreiten Behauptungen wie (?<=a) verwendet werden.

Egal welcher Wert für StartPos angegeben ist, der Rückgabewert ist immer relativ zum ersten Zeichen von Heuhaufen. Zum Beispiel ist die Position von "abc" in "123abc789" immer 4.

Rückgabewert

Typ: Integer

Diese Funktion gibt die Position des ersten NadelRegEx-Vorkommens ganz links in Heuhaufen zurück. Position 1 ist das erste Zeichen. 0 wird zurückgegeben, wenn das Suchmuster nicht gefunden wurde.

Fehlerbehandlung

Syntaxfehler: Wenn das Suchmuster einen Syntaxfehler enthält, wird ein Error in folgender Form ausgelöst: Compile error N at offset M: Beschreibung. In dieser Zeichenkette ist N die PCRE-Fehlernummer, M die Position des betroffenen Zeichens innerhalb des regulären Ausdrucks und Beschreibung der Fehlertext.

Ausführungsfehler: Wenn bei der Ausführung des regulären Ausdrucks ein Fehler auftritt, wird ein Error ausgelöst. Die Extra-Eigenschaft des Error-Objekts enthält die PCRE-Fehlernummer. Solche Fehler treten selten auf, aber die häufigsten davon sind "zu viele mögliche Übereinstimmungen mit leeren Zeichenketten" (-22), "Rekursion zu tief" (-21) und "Limit der Übereinstimmung erreicht" (-8). In diesem Fall sollten Sie versuchen, das Suchmuster restriktiver zu gestalten - ersetzen Sie z.B. jedes * mit einem ?, + oder einem Limit wie {0,3}, sofern möglich.

Optionen

Siehe RegEx-Kurzübersicht für Optionen wie z.B. i)abc, das die Groß-/Kleinschreibung-Sensitivität ausschaltet.

Match-Objekt (RegExMatchInfo)

Wenn eine Übereinstimmung gefunden wurde, wird ein Objekt mit Informationen über die Übereinstimmung in AusgabeVar gespeichert. Dieses Objekt hat die folgenden Methoden und Eigenschaften:

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

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

Match.Name[N] oder Match.Name(N): Gibt den Namen eines Teilsuchmusters zurück, sofern es einen hat.

Match.Count: Gibt die Gesamtzahl der Teilsuchmuster (erfasste Gruppen) zurück, was auch der Maximalwert für N ist.

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

Match[] oder Match[N]: Gibt die gesamte Übereinstimmung oder ein erfasstes Teilsuchmuster zurück.

Bei allen oben genannten Methoden und Eigenschaften kann N einer der folgenden Werte sein:

Match.N: Kurzform für Match["N"], wobei N ein beliebiger anführungszeichenloser Name oder eine beliebige Zahl ist, der/die nicht in Konflikt mit einer definierten (oben aufgelisteten) Eigenschaft steht. Zum Beispiel Match.1 oder Match.Jahr.

Das Objekt kann enumeriert werden, d.h. die For-Schleife wird unterstützt. Alternativ kann Loop Match.Count verwendet werden.

Performanz

Um eine einfache Teilzeichenkette innerhalb einer größeren Zeichenkette zu suchen, verwenden Sie InStr, da es schneller ist als RegExMatch.

Aus Performanzgründen werden die 100 zuletzt verwendeten regulären Ausdrücke zwischengespeichert (in kompilierter Form).

Die S-Option kann in bestimmten Fällen die Performanz eines häufig verwendeten regulären Ausdrucks verbessern (z.B. in einer Schleife).

Bemerkungen

Sie können einem Teilsuchmuster einen Namen geben, wie z.B. das Wort Jahr im Suchmuster (?P<Jahr>\d{4}). Diese Namen können maximal 32 Zeichen lang sein und dürfen nur aus alphanumerischen Zeichen und Unterstrichen bestehen. Beachten Sie, dass benannte Teilsuchmuster ebenfalls nummeriert sind. Wenn z.B. nach "Jahr" ein namenloses Teilsuchmuster folgt, wird dessen Fund in AusgabeVar[2] gespeichert, nicht in AusgabeVar[1].

Die meisten Zeichen wie abc123 können ganz normal in einem regulären Ausdruck verwendet werden. Anders verhält es sich mit den Metazeichen \.*?+[{|()^$: Um ihre spezielle Bedeutung außer Kraft zu setzen, muss ihnen ein umgekehrter Schrägstrich vorangestellt werden. Zum Beispiel ist \. ein normaler Punkt und \\ ein normaler umgekehrter Schrägstrich. Um nicht nur ein Zeichen, sondern eine ganze Reihe von Zeichen als normale Zeichen zu behandeln, verwenden Sie \Q...\E. Zum Beispiel: \QNormaler Text\E.

Innerhalb eines regulären Ausdrucks können zum Escapen von Sonderzeichen wie Tabulator und Zeilenumbruch sowohl ein umgekehrtes Häkchen (`) als auch ein umgekehrter Schrägstrich (\) verwendet werden. Zum Beispiel ist `t dasselbe wie \t, es sei denn, die x-Option wird verwendet.

Grundlagen zum Thema "Reguläre Ausdrücke" finden Sie unter RegEx-Kurzübersicht.

Die regulären Ausdrücke von AutoHotkey basieren auf PCRE (Perl-compatible Regular Expressions); weitere Informationen finden Sie unter www.pcre.org.

Innerhalb eines Ausdrucks kann a ~= b als Kurzschreibweise für RegExMatch(a, b) verwendet werden.

RegExReplace, RegEx-Kurzübersicht, Callouts in regulären Ausdrücken, InStr, SubStr, SetTitleMatchMode RegEx, Global matching and Grep (archivierter Forumsthread)

Übliche Quellen für Textdaten: FileRead, Download, A_Clipboard, GUI-Eingabefelder

Beispiele

Allgemeine RegEx-Beispiele finden Sie unter RegEx-Kurzübersicht.

Meldet 4, weil das die Position ist, an der die Übereinstimmung gefunden wurde.

MsgBox RegExMatch("xxxabc123xyz", "abc.*xyz")

Meldet 7, weil $ die Übereinstimmung am Ende erzwingt.

MsgBox RegExMatch("abc123123", "123$")

Meldet 1, weil eine Übereinstimmung dank der i-Option (nicht Groß-/Kleinschreibung-sensitiv) gefunden wurde.

MsgBox RegExMatch("abc123", "i)^ABC")

Meldet 1 und speichert "XYZ" in TeilMust[1].

MsgBox RegExMatch("abcXYZ123", "abc(.*)123", &TeilMust)

Meldet 7 statt 1 wegen der Startposition 2 statt 1.

MsgBox RegExMatch("abc123abc456", "abc\d+",, 2)

Zeigt die Verwendung des Match-Objekts.

FundPos := RegExMatch("Musterstraße 1", "(.*) (?<nr>\d+)", &TeilMust)
MsgBox TeilMust.Count ": " TeilMust[1] " " TeilMust.Name[2] "=" TeilMust.nr  ; Zeigt "2: Musterstraße nr=1" an

Ruft die Endung einer Datei ab. Beachten Sie, dass SplitPath auch dafür verwendet werden kann, aber mit höherer Zuverlässigkeit.

Pfad := "C:\Foo\Bar\Baz.txt"
RegExMatch(Pfad, "\w+$", &Endung)
MsgBox Endung[]  ; Meldet "txt".

Ähnlich wie Transform Deref von AutoHotkey v1 löst die folgende Funktion Variablenreferenzen und Escapesequenzen in einer Zeichenkette auf. Außerdem zeigt dieses Beispiel, wie alle Übereinstimmungen in einer Zeichenkette gefunden werden können, anstatt bei der ersten Übereinstimmung zu stoppen (vergleichbar mit dem RegEx-g-Flag von JavaScript).

var1 := "abc"
var2 := 123
MsgBox Deref("%var1%def%var2%")  ; Meldet abcdef123.

Deref(Str)
{
    spo := 1
    out := ""
    while (fpo:=RegexMatch(Str, "(%(.*?)%)|``(.)", &m, spo))
    {
        out .= SubStr(Str, spo, fpo-spo)
        spo := fpo + StrLen(m[0])
        if (m[1])
            out .= %m[2]%
        else switch (m[3])
        {
            case "a": out .= "`a"
            case "b": out .= "`b"
            case "f": out .= "`f"
            case "n": out .= "`n"
            case "r": out .= "`r"
            case "t": out .= "`t"
            case "v": out .= "`v"
            default: out .= m[3]
        }
    }
    return out SubStr(Str, spo)
}