FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: heikoh81 am 14 März 2018, 20:42:07

Titel: (gelöst) RegEx: Text ausschließen
Beitrag von: heikoh81 am 14 März 2018, 20:42:07
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
Titel: Antw:RegEx: Text ausschließen
Beitrag von: sumsum am 14 März 2018, 22:28:46
Alexa.+(?<!_ChkBox)$
Titel: Antw:RegEx: Text ausschließen
Beitrag von: Christoph Morrison am 14 März 2018, 23:11:10
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)
Titel: Antw:RegEx: Text ausschließen
Beitrag von: sumsum am 14 März 2018, 23:38:16
OK, Lerne gerne dazu.  :)
Laut https://regex101.com/ ergibt für deine regex Alexa_abc_ChkBox ein Match.
Das ist aber nicht gewollt.
Titel: Antw:RegEx: Text ausschließen
Beitrag von: sumsum am 15 März 2018, 00:19:09
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
Titel: Antw:RegEx: Text ausschließen
Beitrag von: heikoh81 am 15 März 2018, 21:49:24
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...
Titel: Antw:RegEx: Text ausschließen
Beitrag von: KernSani am 16 März 2018, 06:54:14
Schreibst du dann bitte noch [Gelöst] vor das Subject des ersten Posts?
Danke!


Kurz, weil mobil...
Titel: Antw:RegEx: Text ausschließen
Beitrag von: heikoh81 am 16 März 2018, 20:37:58
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
Titel: Antw:RegEx: Text ausschließen
Beitrag von: sumsum am 17 März 2018, 10:44:27
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)).+
Titel: Antw:RegEx: Text ausschließen
Beitrag von: heikoh81 am 31 März 2018, 13:15:50
Zitat von: sumsum am 17 März 2018, 10:44:27
Die regEx sollte es tun:

Alexa(?!.*(?:_ChkBox)).+

So funktioniert es, danke!