Hallo zusammen,
ich lese die Temperaturen aus Lupusec-Sensoren via HTTPMod aus.
Regex:
(?s)(Innen)+.*?({WEB_MSG_TS_DEGREE})([^ }]*)
Klappt einwandfrei. Allerdings erscheint im Log folgender Warnhinweis:
2021.01.29 11:40:39 3: Temperaturen: set attr reading05Regex (?s)(Innen)+.*?({WEB_MSG_TS_DEGREE})([^ }]*) created warning: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/(?s)(Innen)+.*?({ <-- HERE WEB_MSG_TS_DEGREE})([^ }]*)/ at ./FHEM/98_HTTPMOD.pm line 650, <$fh> line 1592.
Lasse ich die linke geschweifte Klammer vor WEB /alternativ diese UND die rechts geschweifte Klammer hinter DEGREE) weg, klappt die Auslesung nicht.
In HTTPMod lauten die Daten
"status": "{WEB_MSG_TS_DEGREE} 21.46 {WEB_MSG_RH_HUMIDITY} 39"},
Komischerweise klappt die Auslesung der Feuchtigkeitsmessung OHNE geschweifte Klammer.
Die RegEx der Feuchtigkeitsmessung lautet:
(?s)(Innen)+.*?(WEB_MSG_RH_HUMIDITY)([^ }]*\d)
Hat jemand eine Idee?
LG INgo
...ist ein beliebetes Thema, das auch mit Suche nach "Unescaped left brace in regex is deprecated" häufig auftaucht...
Man muss einfach tun, was die Fehlermeldung sagt, nämlich die linke geschweifte Klammer in der Suche escapen. Das hier sollte funktionieren:
(?s)(Innen)+.*?(\{WEB_MSG_TS_DEGREE})([^ }]*)
Genial, das wars! Jetzt habe ich auch verstanden, was escapen bedeutet ;-)
Herzlichen Dank, Beta-User!
...immer wieder gerne :) .
Vielleicht noch ein Hinweis: v.a., wenn man Syntaxhighlight nutzt (mit codemirror, z.B.), kann es sein, dass die Klammersetzung "komisch" (=unpaarig) aussieht. Bei zu durchsuchenden Ausgangstexten, von denen man weiß, dass das relativ statisch ist, kann man einfach auch "Zählen" und den Punkt für jede Klammer verwenden, dann sieht das zumindest schöner aus. Das findet z.B. in den Regexen bei mqtt2.template häufiger Anwendung...
Ist nur "blöd", wenn man die schließende Klammer auch als eindeutigen Kenner braucht (was hier der Fall zu sein scheint).
Eine weitere Option wäre übrigens [{], das funktioniert afaik auch ohne Log-Eintrag.
Tipp hab ich gleich mit aufgenommen, vielen Dank!