RegExReplace() [v1.0.45+]

Ersetzt Vorkommen eines Musters (regulärer Ausdruck) innerhalb einer Zeichenkette.

NeueZkette := RegExReplace(Heuhaufen, NadelRegEx , Ersatz := "", AusgabeVarAnzahl := "", Limit := -1, Startposition := 1)

Parameter

Heuhaufen

Eine Zeichenkette, deren Inhalt durchsucht und ersetzt 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".

Ersatz

Eine reine Zeichenkette (also kein regulärer Ausdruck), die jede gefundene Übereinstimmung ersetzen soll. Sie kann Rückreferenzen wie z. B. $1 enthalten; $1 würde die Teilzeichenkette aus dem Heuhaufen einbringen, die zum ersten Teilmuster passt. $0 bis $9 sind die einfachsten Rückreferenzen - $0 ist die Teilzeichenkette des gesamten Musters, $1 ist die Teilzeichenkette des ersten Teilmusters, $2 ist die zweite, und so weiter. Bei Rückreferenzen über 9 (und optional auch solche unter 9) müssen die Nummern in geschweiften Klammern gesetzt werden, zum Beispiel: ${10}, ${11}, und so weiter. Bei benannten Teilmustern müssen die Namen in geschweiften Klammern gesetzt werden; z. B. ${Teilmustername}. Um ein direkt geschriebenes $ anzugeben, verwenden Sie $$ (dieses Zeichen ist das einzige, das so eine Sonderbehandlung benötigt; alle anderen Zeichen müssen nicht mit einem Escapezeichen versehen werden).

Um die Groß-/Kleinschreibung eines Teilmusters zu ändern, muss nach $ eines der folgenden Zeichen erfolgen: U oder u (Großschreibung), L oder l (Kleinschreibung), T oder t (Titelschreibung; das heißt, dass bei jedem Wort das erste Zeichen großgeschrieben und die restlichen Zeichen kleingeschrieben sind). Zum Beispiel würden sowohl $U1 als auch $U{1} das erste Teilmuster in eine großgeschriebene Version umwandeln.

Rückreferenzen, die nicht existieren, und solche, die mit nichts im Heuhaufen übereinstimmen - z. B. eines der Teilmuster in "(abc)|(xyz)" - werden in leere Zeichenketten umgewandelt.

AusgabeVarAnzahl

Geben Sie eine Variable an, in der die Anzahl gespeichert werden soll, wie oft der Heuhaufen ersetzt wurde (0, wenn keine).

Limit

Lässt man Limit weg, wird standardmäßig -1 verwendet. Dieser Wert bewirkt, dass alle gefundenen Vorkommen des Musters in Heuhaufen ersetzt werden. Ansonsten kann man angeben, wie oft der Heuhaufen ersetzt werden soll. Der Heuhaufen-Bereich rechts neben der letzten Ersetzung bleibt unverändert.

Startposition

Lässt man Startposition weg, wird standardmäßig 1 verwendet (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 nichts ersetzt 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 eine komplette Kopie von Heuhaufen; der einzige Unterschied könnte sein, dass mehr von seiner linken Seite unverändert bleibt, verglichen zu den Auswirkungen, wenn die Startposition eine 1 wäre.

Rückgabewert

Diese Funktion gibt eine Version von Heuhaufen zurück, deren Inhalte von der Operation ersetzt wurden. Wenn nichts ersetzt werden konnte, wird Heuhaufen unverändert zurückgegeben. Wenn ein Fehler auftritt (z. B. ein Syntaxfehler innerhalb von NadelRegEx), wird Heuhaufen unverändert zurückgegeben (außer in den Versionen vor 1.0.46.06, die eine leere Zeichenkette zurückgaben) und ErrorLevel auf einen der unteren Werte statt auf 0 gesetzt.

Fehlerbehandlung

[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.

Leistung

Um einfache Teilzeichenketten zu ersetzen, verwenden Sie StringReplace, weil es schneller als RegExReplace() ist.

Wenn Ihnen die maximale Anzahl an Ersetzungen bekannt ist, können Sie diese im Limit-Parameter angeben, um die Leistung zu verbessern, weil die Suche früh stoppen kann (dies könnte auch die Speicherauslastung auf dem System während der Operation reduzieren). Wenn Sie beispielsweise wissen, dass nur eine Übereinstimmung am Anfang einer langen Zeichenkette sein kann, könnten Sie ein Limit von 1 angeben.

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

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

Bemerkungen

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 ist `t das gleiche wie \t.

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

Siehe auch

RegExMatch(), RegEx-Kurzübersicht, Callouts in regulären Ausdrücken, StringReplace, InStr()

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

Beispiele

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

#1

MsgBox % RegExReplace("abc123123", "123$", "xyz")  ; Zeigt "abc123xyz" an, weil durch $ eine Übereinstimmung nur am Ende vorkommen darf.
MsgBox % RegExReplace("abc123", "i)^ABC")  ; Zeigt "123" an, weil eine Übereinstimmung aufgrund der nicht-Groß-/Kleinschreibung-sensitiven Option möglich gemacht wurde.
MsgBox % RegExReplace("abcXYZ123", "abc(.*)123", "aaa$1zzz")  ; Zeigt "aaaXYZzzz" mithilfe der Rückreferenz $1 an.
MsgBox % RegExReplace("abc123abc456", "abc\d+", "", AnzahlErsetzungen)  ; Zeigt eine leere Zeichenkette an und speichert eine 2 in AnzahlErsetzungen.