An diversen Stellen im Portal kommen sogenannte "Reguläre Ausdrücke" (kurz Regex - vom englischen regular expressions) zum Einsatz.
Diese Textsuchmuster sind sehr nützlich und umfassend, erfordern jedoch auch eine gewisse Unerschrockenheit, da sie auf den ersten Blick etwas sehr kryptisch daherkommen.
Um den Einstieg möglichst zu erleichtern, wurde im EDL-Portal nebst der offiziellen Schreibweise auch eine stark vereinfachte Form implementiert. Untenstehend sind die Unterschiede genauer erläutert.
Ein Beispiel, bei welchem Regex zum Einsatz kommt, ist die Sensoren-Importier-Regel, welche automatisch nach neuen Sensoren/Datenpunkten auf dem ProMoS-Leitsystem sucht und im EDL-Portal nicht vorhandene Datenpunkte als Sensoren anlegt.
Die Grundaufgabe der regulären Ausdrücke ist es immer, einen Text nach gewissen Muster abzusuchen und bestimmte Teile davon zurück zu liefern.
Als Beispiel wird bei der Importier-Regel nach spezifischen AKS gesucht, zu welchen man Sensoren im Portal anlegen möchte.
Man möchte aus untenstehenden Datenpunkten alle Elektrozähler ins EDL-Portal importieren. Vom AKS-System her ist gegeben, dass im zweit letzten Abschnitt EZ für Elektrozähler steht. Alle anderen Angaben sollen nicht beachtet werden.
GEB0001:UG01:S0314:EZ03:SG
GEB0032:OG04:S312:EZ09:WW
GEB0421:OG08:S003:KW02:ZF
GEB0001:UG02:S027:TG01:EZ
Mit einem regulären Ausdruck können die Texte nun wie folgt durchsucht werden:
Vereinfachte Form: ( verfügt lediglich über "?" als Platzhalter für einen AKS-Teil (unterteilt durch ":") und "*" als generellen Platzhalter)
*EZ?:?
Offizielle Schreibweise:
/^.{0,}EZ[0-9]{0,}\:[^\:]{0,}$/
Erklärung zur offiziellen Schreibweise:
/ |
Beginn des Ausdrucks |
^ |
Beginn der Zeichenkette |
. {0,} |
beliebiges Zeichen - 0 bis unendlich mal |
EZ |
danach muss "EZ" folgen |
[0-9]{0,} |
danach kann eine beliebige Ziffer von 0-9 folgen - 0 bis unendlich mal |
\: |
danach muss ein ":" folgen (da das : bei Regex auch sonst eine Funktion hat, muss dies mit vorangestelltem \ geschrieben werden) |
[^\:] {0,} |
danach folgt beliebiges Zeichen - 0 bis unendlich mal ausser ein ":" da wir nicht wollen, dass noch ein AKS-Abschnitt mehr kommt |
$ |
Ende der Zeichenkette oder Zeilenende/Umbruch |
/ |
Ende des Ausdrucks |
Achtung! Verwendet man die offizielle Schreibweise, muss zum Beginn und zum Schluss ein / gesetzt werden.
Mit dem portalinternen Regex-Konfigurator kann direkt ausprobiert werden, welche AKS dem Muster entsprechen und welche nicht.
Weitere - umfangreichere - Tools sind im Internet (z.B. regex101.com ) zu finden.
Auch sehr umfangreich und mit guten Beispielen abgehandelt wird Regex auf der entsprechenden Wikipedia-Seite: https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
Weitere Beispiele:
Angenommen wir haben mehrere Zähler und wir möchten nur die Zähler ab der Nummer 26 erfassen. Ferner lediglich den Zusatz "VVolume" ohne den "Flow" (in der Liste unterstrichen).
In der Datenbank sind folgende Daten vorhanden:
BN028:MBus:004:Vis:VVolume
BN028:MBus:005:Vis:VVolume
BN028:MBus:005:Vis:VVolumeFlow
BN028:MBus:026:Vis:VVolume
BN028:MBus:026:Vis:VVolumeFlow
BN028:MBus:028:Vis:VVolume
BN028:MBus:028:Vis:VVolumeFlow
BN028:MBus:030:Vis:VVolume
BN028:MBus:030:Vis:VVolumeFlow
BN028:MBus:032:Vis:VVolume
BN028:MBus:032:Vis:VVolumeFlow
Mit dem regulären Ausdruck:
/BN028:MBus:0[23][0268]:Vis:VVolume$/
werden nur die unterstrichenen AKS-Namen gefunden.
Zeichen |
Wirkung |
* |
Alle Zeichen inklusive “:” |
? |
Alle Zeichen bis zum nächsten delimiter. Default: “:” |
. |
Einzelnes Zeichen |
[xyz] |
Auswahl von Zeichen, die vorkommen dürfen |
[^xyz] |
Auswahl von Zeichen, die nicht vorkommen dürfen |
[0-9] |
Bereich von Zeichen, die vorkommen dürfen [a-z], [2-5] usw. |
[^a-z] |
Bereich von Zeichen, die nicht vorkommen dürfen |
^ |
Start der Zeichenkette |
$ |
Ende der Zeichenkette |
/ |
Delimiter (zum definieren von Anfang und Ende, falls nicht nur * und ? verwendet werden) |
\s |
Leerraum (Whitespaces) |
\S |
Kein Leerraum |
\d |
Irgendeine eine Ziffer |
\D |
keine Ziffer |
\w |
Irgendein Buchstabe |
\W |
Kein Buchstabe |
[..] |
Alles was vorkommt |
(a|b) |
a oder b |
a? |
nichts oder ein a |
a* |
nichts oder ein oder mehrere a |
a+ |
ein oder mehrere a |
a{3} |
exakt 3 a |
a{3,} |
3 oder mehr a |
a{3,6} |
3 bis 6 a |
\b |
Wortgrenze |
\B |
keine Wortgrenze |
Weitere Beispiele unter https://regex101.com/
Bemerkung:
Wenn nicht nur die Platzhalter * und ? genutzt werden, so muss ein Delimiter genutzt werden.
Beispiel: /EZV:EZV1:ZE1:UG\d+:000:K01:(.+)/
Der Backslash \ muss gesetzt sein!