Hallo,
ich habe Dummies der Art
Alexa*
sowie Checkboxen der Art
Alexa*_ChkBox.
In einem Filelog möchte ich alle state-Veränderunen der Dummies, aber NICHT der Checkboxen loggen.
Ich habe experimentiert mit (!?ChkBox), aber das hat nie so richtig funktioniert.
So wird alles geloggt:
./log/AlexaAlleDummiesMitRegex.log ^Alexa.*
Wie müsste ich den RegEx anpassen, damit alle devices mit _ChkBox nicht enthalten sind.
Viele Grüße,
Heiko
Alexa.+(?<!_ChkBox)$
Zitat von: sumsum am 14 März 2018, 22:28:46
Alexa.+(?<!_ChkBox)$
Das schreibst du besser als
negative lookahead, anstelle eines
negative lookbehind. Das spart dem RegEx-Parser ungefähr 50% der Arbeitsschritte.
Alexa.+(?!_ChkBox)
OK, Lerne gerne dazu. :)
Laut https://regex101.com/ ergibt für deine regex Alexa_abc_ChkBox
ein Match.
Das ist aber nicht gewollt.
ich nochmal. Mit einer Mischung aus negative lookahead und non-capturing group klappt es aber.
Alexa(?!.*(?:_ChkBox))
Wie Christoph richtig sagt braucht er die Hälfte der Schritte.
Habe da nie so richtig drauf geachtet. ;D
Zitat von: sumsum am 15 März 2018, 00:19:09
Alexa(?!.*(?:_ChkBox))
Genial, danke euch allen für die Erarbeitung der Lösung.
Konnte es mit regex101 auch (so einigermaßen) nachvollziehen.
Ich werde die Performance in FHEM im Auge behalten und hoffe, dass dieses Regex nicht zu viel CPU-Last auf meinem Raspi3 erzeugt...
Schreibst du dann bitte noch [Gelöst] vor das Subject des ersten Posts?
Danke!
Kurz, weil mobil...
Ich kann das Topic noch nicht schließen, war zu voreilig.
Meine Dummies lauten immer:
AlexaLichtCouch
AlexaLichtCouch_ChkBox
Mit
./log/AlexaAlleDummiesMitRegex.log Alexa(?!.*(?:_ChkBox))
wird leider gar nichts mehr geloggt.
regex101 markiert in "AlexaLichtCouch" auch nur "Alexa", zeigt aber "full match" an.
Liegt es vielleicht daran?
Mit der filelog-Definition
./log/AlexaAlleDummiesMitRegex.log ^Alexa.*
wird die Aktivität von beiden Dummies geloggt.
Viele Grüße,
Heiko
Hallo Heiko,
im Event Monitor kannst du sehen, dass hinter dem device name ja noch was kommt
zum Beispiel:
... dummy AlexaLichtCouch_ChkBox off
... dummy AlexaLichtCouch off
Die regEx sollte es tun:
Alexa(?!.*(?:_ChkBox)).+
Zitat von: sumsum am 17 März 2018, 10:44:27
Die regEx sollte es tun:
Alexa(?!.*(?:_ChkBox)).+
So funktioniert es, danke!