(gelöst) Problem bei Regular Expression

Begonnen von Sargon, 25 Januar 2015, 17:49:28

Vorheriges Thema - Nächstes Thema

Sargon

Hallo zusammen,

ich habe ein Notify für das Modul Mailcheck erstellt, was auch soweit funktioniert nur leider in einem Fall nicht. Ich Verwende das Notify um die Anwesenheit per eMail von der IPhone App Freunde zu steuern.
Das Problem ist das folgende Mail Subject: Marion XXXXXX-XXXXXXXX ist an folgendem Standort angekommen: Zuhause.
In dem Subject scheint ein Zeilenumbruch zu sein den ich nicht in den Griff bekomme, hier mein aktuelles If im Notify:

if ( $EVENT =~ "^Marion XXXXXX-XXXXXXXX[A-Za-z \n\r]*angekommen[\n\r :]*Zuhause\./s" ) {fhem("set rr_Marion home")}

Das /s soll ein Modifier sein der mit den Zeilenumbrüchen umgehen kann. Ich bin mir nur nicht sicher ob er korrekt verwendet wird. Der Punkt hinter Zuhause ist Bestandteil des Subjects und wird mit dem \ Escaped.

Hier ein Auszug aus dem Log:

2015.01.23 16:03:48 4: subject decoded: Marion XXXXXX-XXXXXXXX ist an folgendem Standort angekommen:
Zuhause.
2015.01.23 16:03:48 5: Triggering Mail_deEmailFhem (1 changes)
2015.01.23 16:03:48 5: Notify loop for Mail_deEmailFhem Subject: Marion XXXXXX-XXXXXXXX ist an folgendem Standort angekommen:
Zuhause.


Was mache ich hier falsch?

Gruß
Thomas
Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte

Icinger

/s = Single line
/m = Multiline

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

justme1968

der modifier muss hinter das schließende zeichen mit dem du die regex umschließt. du verwendest " und nicht /. also muss es hinter das abschließende ". wenn du nicht das standard / verwendest musst du glaube ich auch das m für match vor dem einleitenden " explizit hin schreiben.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Sargon

Hi,

wie ist es denn mit den Anführungszeichen wenn ich eine Regex mit / definiere dann brauche ich im if keine? Somit sollten dann beide unten aufgeführten Versionen funktionieren?

Version 1
if ( $EVENT =~ "/^Marion XXXXXX-XXXXXXXX[A-Za-z \n\r]*angekommen[\n\r :]*Zuhause\./m" ) {fhem("set rr_Marion home")}

Version 2
if ( $EVENT =~ /^Marion XXXXXX-XXXXXXXX[A-Za-z \n\r]*angekommen[\n\r :]*Zuhause\./m ) {fhem("set rr_Marion home")}


Ich kann das leider nicht Testen da ich keine Ahnung habe wie ich eine Mail selbst schicken kann die einen Zeilenumbruch im Subject hat und deshalb muss ich das im "wirklichen Leben" probieren.

Gruß
Thomas

Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte

justme1968

die zweite version. aber mit s statt m. wenn ich es richtig sehe. 

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Sargon

Hallo,

irgendwie funktioniert das alles nicht, ich hab jetzt 4 verschiedenen Versionen versucht aber keine wurde ausgeführt.


if ( $EVENT =~ /^Marion XXXXXX-XXXXXXXX[A-Za-z \n\r]*angekommen[\n\r :]*Zuhause\./s ) {fhem("set rr_Marion home");;Log 3, "Variante 1"}
if ( $EVENT =~ /s^Marion XXXXXX-XXXXXXXX[A-Za-z \n\r]*angekommen[\n\r :]*Zuhause\./s ) {fhem("set rr_Marion home");;Log 3, "Variante 2"}
if ( $EVENT =~ /^Marion XXXXXX-XXXXXXXX[A-Za-z \n\r]*angekommen[\n\r :]*Zuhause\./m ) {fhem("set rr_Marion home");;Log 3, "Variante 3"}
if ( $EVENT =~ /m^Marion XXXXXX-XXXXXXXX[A-Za-z \n\r]*angekommen[\n\r :]*Zuhause\./m ) {fhem("set rr_Marion home");;Log 3, "Variante 4"}

Hat vielleicht noch jemand eine Idee was ich falsch mache oder eine Webseite mit einem guten Regexprüfer wo ich nochmal die Regex prüfen kann?

Kann man den einem Notify ein Logfile zuordnen?
Ich habe es versucht aber das Logfile bleibt leer. Hier meine Definition: define Mailbefehl_n_log FileLog /volumeUSB1/usbshare/FHEM/var/log/Mailbefehl_n-%Y.log Mailbefehl_n

Gruß und danke für eure Hilfe
Thomas
Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte

Ralf W.

Hilft das?

.*Marion XXXXXX-XXXXXXXX.*:\n.*Zuhause.

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

nesges

Dein String fängt nicht mit "Marion" an, aber du notierst /^Marion... Lass das ^ in Version 1 mal weg.

Icinger

Guten Morgen,

Zitatmit einem guten Regexprüfer wo ich nochmal die Regex prüfen kann?

Ich verwende immer RegExr: http://www.regexr.com/

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

nesges

Eine einfache, puristische Lösung um Regexe zu testen:

perl -e '$t="Der vollständige String gegen den gematcht werden soll
";
$t =~ s/Dein Regex/MATCH/;
print $t'

Sargon

Hallo,

ich habe jetzt eine Lösung gefunden wie ich das Problem umgehen kann. Ich habe bei der AppleID den Namen geändert (gekürzt) und nun funktioniert auch eine einfache Abfrage. Die Regex bei dem anderen Subject (Längerer Name) habe ich nicht in den Griff bekommen, keine der Lösungen hat funktioniert.

Gruß
Thomas
Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte