Regex im Script

Hallo, ich müßte innerhalb von IF THEN-Strukturen etwas per Regex finden und ersetzen. Wie genau ist die Nomenklatur dafür?


Gruß Micha


P.S. Also mir ist klar, daß ich da unter Funktionen ein Suchen-Ersetzen mit Regex hinterlegen kann - das kann ich aber in diesem Fall nicht verwenden

UPDATE: Habe es selbst rausgefunden

Für alle anderen:

${"foo bAr baar"?replace('ba*', 'XY', 'r')}


Ergebnis:

foo XYAr XYr



siehe Freemarker ?replace aber wichtig ist das Flag 'r' am Ende für reguläre Ausdrück.

War für mich auch interessant, kannte ich noch nicht! Ich hatte es über matches gelöst. Kann man in Deinem Ausdruck auch mit Gruppen arbeiten, z.B.


${"Oberstoff 1: 100% Baumwolle, COTTON TWILL, 400 GSM"?replace((.*?\% )(.*?)(,)(.*), groups[2], 'r')}

oder so? (Ergebnis wäre: Baumwolle)

Das ist glaube ich etwas Frage des Geschmacks bzw. der Perspektive. Um etwas aus einem String "herauszuholen" (bei dir "Baumwolle") finde ich ?matches mit ?groups besser, statt etwas zu mit ?replace zu ersetzen. Ein Ersetzen ist auch immer teurer (Performance). In der Freemarker Doku zu ?matches stehen ganze gute Beispiele wie man auf groups zugreift z.B.:


<#assign res = "John Doe"?matches(r"(\w+) (\w+)")>
<#if res> <#-- Must not try to access groups if there was no match! -->
  First name: ${res?groups[1]}
  Second name: ${res?groups[2]}
</#if>


Hinweis am Rande: Wenn du aber mal wirklich ein Suchen & Ersetzen brauchst, dann ist unter Performance-Gesichtspunkten die Variante über unsere Mapper-Funktionen etwas besser. Dort werden die regulären Ausdrücke gecached und nicht jedes mal neu kompiliert. Relevant wenn du mal viele Zeilen und Suchen/Ersetzen hast.


Nachtrag: Der initiale Vorschlag mit ?replace war, weil du in deinem ersten Post Suchen & Ersetzen geschrieben hast, aber leider kein Beispiel genannt hattest. Nach deinem Beispiel sieht ?matches passender aus.