RegEx alternation cmd_1|cmd_1_1

Begonnen von holle75, 30 September 2017, 13:22:35

Vorheriges Thema - Nächstes Thema

holle75

Grrrrrr, also dieses Regex .....

<div data-template="template_setting_doif.html" data-parameter='{"var_DOIF":"PozzoHauptOben_PUMPE_PozzoDOIF","var_icon":"mi-settings_input_antenna","var_name":"Brunnenpumpe","var_description":"Mittags und bei Beregnung an","var_state_enabled":"enabled|initialize|initialized|cmd_1|cmd_1_2|cmd_3|cmd_4|cmd_5","var_state_disabled":"disabled","var_state_active":"cmd_1_1|cmd_2","var_state_extra":""}'></div>

das erste "cmd_1" im "var_state_enabled" wird ausgesucht auch wenn der state "cmd_1_1" ist und "var_state_active" greifen sollte.

Wie muß die Regex aussehen?

Ich weiß noch nicht mal, wie ich dieses Problem ordentlich beschreiben soll   :-\

Danke für eure Hilfe

holle75

#1
verkürzt:

"var_state_enabled":"^(enabled|initialize|initialized|cmd_1|cmd_1_2|cmd_3|cmd_4|cmd_5)$","var_state_disabled":"disabled","var_state_active":"^(cmd_1_1|cmd_2)$","var_state_extra":""

scheint zu funktionieren ..... noch nicht ganz fertig getestet.

Falls jemand Anmerkungen zum Verständnis hat, gerne her damit ..... RegEx Logik generell, fällt mir schwer nachzuvollziehen.

Standarduser

Zitat von: holle75 am 30 September 2017, 15:42:53
Falls jemand Anmerkungen zum Verständnis hat, gerne her damit ..... RegEx Logik generell, fällt mir schwer nachzuvollziehen.

^markiert den Anfang eines Strings
$ markiert das Ende eines Strings

Wenn Du damit Deine Zeichenkette "einrahmst" wird immer der gesamte Inhalt des Readings verglichen. Wenn etwas vor oder hinter dem gesuchten Ausdruck steht, trifft die Bedingung also nicht mehr zu.

Bei einer Abfrage auf true/false matcht die RegEx cmd_1:
"a_cmd_1", "cmd_1", "aaa cmd_1 bbb", "cmd_1_1"

Die RegEx ^cmd_1$ matcht nur noch:
"cmd_1"

holle75

danke dir! Dann machts Sinn, dass es funktioniert ;)