Skip to content

VorlageDokuFcnChange

Steffen Schuemann edited this page Oct 12, 2019 · 1 revision

change()

Muster in Text ersetzen

Syntax

<str>=change(<txt>,<rexp>,<repl>)

Beschreibung

Die Funktion gibt eine Kopie von txt zurück, in der alle Vorkommen von rexp durch repl ersetzt wurden.

Durch die Funktion wird dann jedes Auftreten von dem, durch das mit einem regulären Ausdruck beschriebene Muster rexp, in dem Text txt ersetzt durch den neuen Text in repl. Das mittlere ist also ein Suchmuster und nicht einfach ein Suchtext. Vorlage verwendet dabei die Syntax die auch Perl für reguläre Ausdrücke verwendet. Da dieses eine Art Sprache ist, die selber den Backslash verwendet um Sonderzeichen zu escapen, Vorlage dies auch tut, muß dann jedes für das Pattern gedachte \ durch \\\\ ersetzt werden, Vorlage macht daraus \\ und der Pattern-Parser dann den gewünschten einen. Der letzte Parameter ist hingegen kein Muster, sondern der Text in den das ersetzt werden soll.

Für die Verwendung im Ersetzungstext sind folgende Regeln definiert um auf die Mustertreffer oder Submustertreffer zuzugreifen (die Zeichenfolgen werden dabei durch den entsprechenden Trefferanteil ersetzt):

$&
gesammten Treffer einfügen (eigentlich auch $0, aber das ist obsolet)
$`
Text vor dem Treffer einfügen
Text nach dem Treffer einfügen
$i
Trefferanteil des i-ten Subpatterns einfügen (0<i<Anzahl der Subpatterns)

Soll eine solche Zeichenfolge nicht ersetzt werden, so muß sie mit dem Backslash escaped werden.

Parameter

txt
Zu durchsuchender Wert.
rexp
Regulärer Ausdruck dessen Auftreten ersetzt werden soll.
repl
Wert der für die Treffer des Musters eingesetzt werden soll.

Beispiel

$s='Einheit Ziel ist überladen. Ziel hat keine Kapazitäten mehr frei'
$s2=change($s,'Ziel',unit.Name)

Angenommen die aktuelle Einheit trägt den Namen 'Weihnachtsgnom', $s2 enthält dann danach 'Einheit Weihnachtsgnom ist überladen. Weihnachtsgnom hat keine Kapazitäten mehr frei'.

Referenzen

after(), before(), crop(), match(), Reguläre Ausdrücke

Clone this wiki locally