r$, n = PatternReplaceStr(s$, pat$, repl[, n, encoding])
PatternReplaceStr()
kann verwendet werden, um den Inhalt einer
Zeichenkette mit Hilfe eines Musters zu ändern. Dieser Befehl
ist leistungsfähig und kann für alle Arten von Zeichenkettenoperationen
verwendet werden. Sie gibt eine Kopie von s$
zurück, in der
alle Vorkommen des Musters pat$
durch eine in repl
angegebene
Zeichenfolge ersetzt wurden. PatternReplaceStr()
gibt im
zweiten Wert n
die Gesamtzahl der Ersetzungen zurück.
Das dritte Argument repl
kann entweder eine Zeichenfolge
oder eine Callback-Funktion sein. Wenn repl
eine Zeichenkette
ist, wird sein Wert als Ersatz verwendet. Jede Sequenz in repl
der Form n%
, mit n
zwischen 1 und 9, steht für den Wert der n-ten
Übereinstimmung der Teilzeichenkette (siehe unten). Wenn repl
eine
Funktion ist, wird diese Funktion jedes Mal aufgerufen, wenn
eine Übereinstimmung stattfindet, wobei alle übereinstimmenden
Teilzeichenketten als Argumente übergeben werden; Wenn das Muster
keine Teilmuster enthält, wird die gesamte Übereinstimmung als
einziges Argument übergeben. Wenn der von diesem Befehl zurückgegebene
Wert eine Zeichenkette ist, wird er als Ersatzzeichenfolge
verwendet; Andernfalls ist die Ersatzzeichenfolge die leere
Zeichenkette.
Das optionale vierte Argument n
begrenzt die maximale Anzahl
der auftretenden Ersetzungen. Zum Beispiel wird, wenn n
1 ist,
nur das erste Auftreten von pat$
ersetzt.
Das in pat$
angegebene Muster besteht aus einer Folge von
Musterelementen. Ein Musterelement ist normalerweise eine Zeichenklasse,
die wiederum einen Satz von Zeichen darstellt. Folgende Kombinationen
sind bei der Beschreibung einer Zeichenklasse erlaubt:
x (wobei x keines der magischen Steuerzeichen ^$()%.[]*+-? ist)
. (ein Punkt)
%a
%c
%d
%g
%l
%p
%s
%u
%w
%x
%z
%x (wobei x ein nicht-alphanumerisches Zeichen ist)
x
dar. Dies ist der Standardweg, um die
magischen Steuerzeichen zu umgehen. Jedes Interpunktionszeichen
(auch die Nicht-Steuerzeichen) kann mit einem %
vorangestellt werden,
um sich selbst in einem Muster darzustellen.
[set]
set
ist. Eine Reihe von Zeichen kann durch Trennung der Endzeichen
des Bereichs mit einem -
angegeben werden. Alle oben beschriebenen
%x
Klassen können auch als Komponenten in set
verwendet werden.
Alle anderen Zeichen in set
repräsentieren sich selber. Beispielsweise
repräsentiert [%w_]
(oder [_%w]
) alle alphanumerischen Zeichen
plus Unterstrich, [0-7]
die oktalen Ziffern und [0-7%l%-]
die
Oktalziffern plus Kleinbuchstaben und das Zeichen -
. Die
Interaktion zwischen Bereichen und Klassen ist nicht definiert.
Daher haben Muster wie [%a-z]
oder [a-%%]
keine Bedeutung.
[^set]
set
dar, wobei set
wie oben interpretiert wird.
Für alle Klassen, die durch einzelne Buchstaben (%a
, %c
, etc.)
dargestellt werden, stellt der entsprechende Großbuchstabe
das Gegenteil der Klasse dar. Beispielsweise stellt %S
alle
Nicht-Leerzeichen dar.
Die folgenden Elemente sind gültige Musterelemente:
*
, die 0 oder
mehr Wiederholungen von Zeichen in der Klasse entspricht. Dieses
Wiederholungselement entspricht immer der längsten möglichen Reihenfolge.
+
, die 1 oder
mehr Wiederholungen von Zeichen in der Klasse entspricht. Dieses
Wiederholungselement entspricht immer der längsten möglichen Reihenfolge
-
, die auch
0 oder mehr Wiederholungen von Zeichen in der Klasse entspricht.
Anders als *
entsprechen diese Wiederholungselemente immer
der kürzesten Reihenfolge
?
, die 0 oder
1 Vorkommen eines Zeichens in der Klasse entspricht
%n
, n
zwischen 1 und 9; Dieses Element entspricht einer
Teilzeichenfolge gleich der n-ten übereinstimmenden Zeichenfolge
(siehe unten)
%bxy
, wobei x
und y
zwei verschiedene Zeichen sind; Dieses
Element stimmt mit Zeichenfolgen überein, die mit x
beginnen,
mit y
enden und wo x
und y
ausgeglichen sind. Dies bedeutet,
dass wenn man die Zeichenfolge von links nach rechts liest
und +1 für ein x
und -1 für ein y
zählt, das letzte y
das
erste y
ist, in dem die Zählung 0 erreicht. Beispielsweise
stimmt das Element %b()
mit Ausdrücken mit ausgeglichenen
Klammern überein.
Ein Muster ist eine Folge von Musterelementen. Ein ^
am Anfang
eines Musters verankert die Übereinstimmung am Anfang der
Objektzeichenfolge. Ein $
am Ende eines Musters verankert
die Übereinstimmung am Ende der Objektzeichenfolge. An anderen
Stellen haben ^
und $
keine besondere Bedeutung und stellen
sich selber dar.
Ein Muster kann Teilmuster enthalten, die in Klammern eingeschlossen
sind; sie beschreiben die Teilübereinstimmung. Wenn eine Übereinstimmung
erfolgreich ist, werden die Teilzeichenfolgen der Objektzeichenfolge,
die mit den Aufzeichnungen übereinstimmen, für zukünftige Verwendung
gespeichert (erfasst). Übereinstimmungen werden nach ihrer
linken Klammern numeriert. Zum Beispiel wird in dem Muster
"(a*(.)%w(%s*))" der Teil der Zeichenfolge, der mit a*(.)%w(%s*)
übereinstimmt, die Nummer 1 erhalten; Die Zeichenübereinstimmung
mit . erhält die Zahl 2 und die Teilübereinstimmung %s*
hat
die Nummer 3.
Als Sonderfall erfasst das leere () die aktuelle Zeichenkettenposition
(eine Zahl). Wenn wir zum Beispiel das Muster ()aa()
auf
die Zeichenfolge "flaaap" anwenden, gibt es zwei Positionszahlen:
3 und 5.
Ein Muster darf keine eingebetteten Nullen enthalten. Verwenden
Sie stattdessen %z
.
Mit dem optionalen Parameter encoding
kann die zu verwendende
Zeichencodierung festgelegt werden. Dies ist standardmäßig auf
die Standardcodierung eingestellt, die mit SetDefaultEncoding()
eingestellt ist. Siehe Zeichencodierungen für Details.
Siehe auch PatternFindStr(), PatternFindStrDirect() und PatternFindStrShort().
s$
geändert
werden solls$ = PatternReplaceStr("Hello World", "(%w+)", "%1 %1")Der obige Code gibt "Hello Hello World World" zurück.
s$ = PatternReplaceStr("Hello World from Hollywood", "(%w+)%s*(%w+)", "%2 %1")Dieser Code gibt "World Hello Hollywood from" zurück.
s$ = PatternReplaceStr("home = $HOME, user = $USER", "%$(%w+)", GetEnv)Dieses Beispiel gibt "home = /home/andreas, user = andreas" zurück (auf Linux).
Local t = {name = "Hollywood", version="5.0"} s$ = PatternReplaceStr("$name_$version.jpg", "%$(%w+)", Function(v) Return(t[v]) EndFunction)Diesmal wird "Hollywood_5.0.jpg" zurückgegeben.