FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Sargon am 25 Januar 2015, 17:49:28

Titel: (gelöst) Problem bei Regular Expression
Beitrag von: Sargon am 25 Januar 2015, 17:49:28
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
Titel: Antw:Problem bei Regular Expression
Beitrag von: Icinger am 25 Januar 2015, 17:54:12
/s = Single line
/m = Multiline

lg, Ici
Titel: Antw:Problem bei Regular Expression
Beitrag von: justme1968 am 25 Januar 2015, 19:18:12
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
Titel: Antw:Problem bei Regular Expression
Beitrag von: Sargon am 25 Januar 2015, 20:01:37
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

Titel: Antw:Problem bei Regular Expression
Beitrag von: justme1968 am 25 Januar 2015, 21:18:51
die zweite version. aber mit s statt m. wenn ich es richtig sehe. 

gruß
  andre
Titel: Antw:Problem bei Regular Expression
Beitrag von: Sargon am 27 Januar 2015, 23:26:46
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
Titel: Antw:Problem bei Regular Expression
Beitrag von: Ralf W. am 28 Januar 2015, 01:08:23
Hilft das?

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

MfG
Titel: Antw:Problem bei Regular Expression
Beitrag von: nesges am 28 Januar 2015, 01:10:47
Dein String fängt nicht mit "Marion" an, aber du notierst /^Marion... Lass das ^ in Version 1 mal weg.
Titel: Antw:Problem bei Regular Expression
Beitrag von: Icinger am 28 Januar 2015, 08:37:23
Guten Morgen,

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

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

lg, Ici
Titel: Antw:Problem bei Regular Expression
Beitrag von: nesges am 28 Januar 2015, 09:22:28
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'
Titel: (gelöst) Problem bei Regular Expression
Beitrag von: Sargon am 07 Februar 2015, 18:49:26
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