Hilfe bei Regex (Exclude?)

Begonnen von FHEMAN, 24 November 2014, 00:59:41

Vorheriges Thema - Nächstes Thema

FHEMAN

Hallo, ich zerbreche mir jetzt seit 2,5 Stunden den Kopf:
Wie kann ich alle Nicht-Dummies greifen?

TuerFensterKontakte
TuerFensterKontakt.WZ.FensterL
TuerFensterKontakt.WZ.FensterL.Dummy


Folgende Idee funktioniert nicht:
TuerFensterKontakt[.].*(!Dummy).*

Dazu habe ich folgende Fragen:

  • Gibt es ein Exclude?
  • Wie kann ich einen Punkt escapen?
  • Gelten grundsätzlich die allgemeinen RegEx Regeln?

Gute Nacht
Ron
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Phill

Hi, ich denke deine Fragen kann man leicht durch etwas Internetrecherche lösen...
Aber trotzdem versuche ich dir mal zu helfen:

1. Ja, sogar mehrere.
(?!Dummy) # nur dann erfolgreich, wenn Dummy nicht folgt
(?<=Dummy) # nur dann erfolgreich, wenn Dummy nicht vorangeht
# und man kann das auch über Zeichenklassen lösen
[^D][^u][^m][^m][^y]


2. Mit escape. Eckige klammern werden als Zeichenklassen interpretiert. Also [abc] a oder b oder c\.

3. Es gelten zumindest die allgemeinen "Perl" RexExp Regeln.

Gruß
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

FHEMAN

Hallo Phill,

danke, dass du trotz dem versuchst, mir zu helfen  ;)

1. das Exluden funktioniert nicht bei meinem o.g. Beispiel. Bsp-Notify TuerFensterKontakt[.].*(?!Dummy):(closed|open|.*ACK.*) lässt auch alle ".Dummy" durch:
TuerFensterKontakt.Kueche.Fenster.Dummy:closed
TuerFensterKontakt.Kueche.Fenster:closed

2. das Excapen mit Backslash funktioniert auch nicht. Ich muss den Umweg über [] gehen.

Noch irgendwelche Ideen?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Ralf W.

Das sollte gehen:
(?!.*Dummy)TuerFensterKontakt.*:(closed|open|.*ACK.*)

MfG
Proxmox Nipogi AM16, FHEM:RaspberryMatic:DE ConBee II, diverse Sensoren und Aktoren.

FHEMAN

Hallo Ralf, danke Dir. Ich werde heute Abend das Ergebnis sehen.
Wenn wir bei der Syntax sind, kannst Du mir bitte sagen, wann man ein ":" verwendet und wann nicht?
Im Eventmonitor taucht kein ":" auf und trotzdem muss ich scheinbar manchmal im notify damit arbeiten!?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Ralf W.

@derron

Ich würde mich als FHEM-Anfänger bezeichnen. Ist schon recht heftig, was zu beachten ist. Aber FHEM ist geil ...

Deine Fragen beantwortet die FHEM Referenz:
<Suchmuster> ist entweder der Name des auslösenden ("triggernden") Gerätes oder die Kombination aus Gerät und auslösendem Ereignis (Event) Gerätename:Event.

MfG
Ralf
Proxmox Nipogi AM16, FHEM:RaspberryMatic:DE ConBee II, diverse Sensoren und Aktoren.

FHEMAN

    OK, klingt einleuchtend. Man kann also nicht copy&paste aus dem EventMonitor machen.

    Ich habe noch ein paar Fragen zum besseren Programmierstil:


    • Ist es eigentlich performanter, mehrere Notifies zu verwenden, oder lieber alles (unübersichtlich) in einem * Notify per Code abzufackeln?
    • Und ist es aus Performancesicht nicht nachteilig, Regex zu nutzen?
if (TFK =~ m"open") anstelle von
if ((TFK eq "open") || (TFK eq "open (to XYZ)"))
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB