Reguläre Ausdrücke (RegExp / Regex)

Der OCL-Operatoren regExpMatch und replaceRegex verwenden reguläre Ausdrücke.

Im Internet sind viele Informationen zu regulären Ausdrücken zu finden. Hier als Beispiel der Artikel Regulärer Ausdruck in Wikipedia. Eine gute Einführung findet sich auch unter folgendem Link: http://www.regular-expressions.info/

In Vertec können die Grundelemente (., *, +, [, ], ^, $, -, \) verwendet werden:

. Any single character. Example: h.t matches hat, hit, hot and hut.
[ ] Any one of the characters in the brackets, or any of a range of characters separated by a hyphen (-).

Examples: h[aeiou][a-z] matches hat, hip, hit, hop, and hut; x[0-9] matches x0, x1, …, x9.

[^] Any characters except for those after the caret "^".

Example: h[^u]t matches hat, hit, and hot, but not hut.

^ The start of a line.
$ The end of a line (not the line break characters). Use this for restricting matches to characters at the end of a line.

Example: end$ only matches "end" when it's the last word on a line, and ^end only matches "end" when it's the first word on a line.

* Matches zero or more of the preceding characters or expressions.

Example: ho*p matches hp, hop and hoop.

+ Matches one or more of the preceding characters or expressions.

Example: ho+p matches hop, and hoop, but not hp.

\ "Escapes" the special meaning of the above expressions, so that they can be matched as literal characters. Hence, to match a literal "\", you must use "\\".

Beispielsammlung

Kontrolliert, ob eine Telefonnummer nur aus Ziffern besteht. Erlaubt sind Leerschläge und '-'.

standardtelefon.regExpMatch('^[0-9 -]*$')

Stellt einen Adresstext in einer Zeile dar, die Zeilen werden durch Kommata getrennt:

oclastype(Adresseintrag).adresstext.replaceregex('\r\n',', ') 

Kürzt vom ausgeschriebenen Namen auf dem Bearbeiter den Vornamen ab (Vorname und Name befinden im gleichen Feld):

name.replaceregex('.*\s+', name.substring(0,0)+'. ')

Ergebnis:

Hans Muster -> H. Muster
Hans P. Muster -> H. Muster

Sucht in allen Adressen nach allen Mayers, Mejers, Maiers, Meyers etc.:

adresseintrag->select(name->regExpMatch('M[ae][ijy]er'))

Zeigt in einer Spalte auf einer Liste von Firmen vom Firmennamen nur das an, was in einer Klammer steht:

if name.sqllike ('%(%') then name.replaceRegex('^.*\(','').replaceregex('\)$','') else '' endif

Ergebnis:

Testfirma (Zusatzinformation) -> Zusatzinformation

Zeigt in einer Spalte auf einer Liste von Firmen vom Firmennamen nur das an, was nicht in einer Klammer steht:

name.replaceregex('\(.*\)$','')

Ergebnis:

Testfirma (Zusatzinformation) -> Testfirma


04.05.2004 | 23.06.2015: Titel ergänzt mit den Begriffen RegExp und Regex.
Produktlinien: Standard, Expert
Module: Leistung & CRM