+ Antworten
Ergebnis 1 bis 8 von 8
  1. #1
    Registriert seit
    Oct 2014
    Beiträge
    585

    Standard SetReceiveDataFilter RegEx Regel

    Hallo,

    die RegEx Regeln werden nicht mein Freund

    Ich will in einem Modul eine SetReceiveDataFilter setzen.

    Dies ist er String der über den Server Socket I/0 ankommt:

    PHP-Code:
    09.08.201911:24:53 RECEIVED [127.0.0.1:63593] | POST HTTP/1.1<CR><LF>Host127.0.0.1:8081<CR><LF>User-AgentNukiBridge_12345678<CR><LF>Accept: */*<CR><LF>Connection: Close<CR><LF>Content-Type: application/json;charset=utf-8<CR><LF>Content-Length: 82<CR><LF><CR><LF>{"nukiId": 987654321, "state": 1, "stateName": "locked", "batteryCritical": false} 
    Mich interessiert der Teil "nukiId": 987654321

    PHP-Code:
    $this->SetReceiveDataFilter('.*987654321.*'); 
    funktioniert es, ich will aber den "Präfix", bzw. Feldbezeichnung "nukiID": noch mit abfragen / abfangen.

    Den RegEx Online Editor https://regex101.com habe ich schon bemüht, Debugger und Code war soweit okay, aber funktioniert irgendwie nicht.

    Versucht habe ich:

    PHP-Code:
    $this->SetReceiveDataFilter('.*nukiId.:987654321.*'); 
    Vermutlich völlig falsch! Kann jemand mich mal eben unterstützen?!?

    Merci!

    Uli

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,037

    Code:
    .*"nukiId": 987654321.*
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    May 2005
    Beiträge
    2,272

    Da fehlt wahrscheinlich noch das Leerzeichen zwische Doppelpunkt und Zahl im Filter.

    Tommi

    <Edit: Michael war schneller >

  4. #4
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,037

    Ergänzend dazu wenn man so einen Fehler sucht:
    Das was im Debug steht ist nicht das worauf IPS den Filter setzt!
    Der Filter wirkt auf den JSON-String welcher im Datenfluss benutzt wird.
    Um diese zu sehen, einfach im eigenen Modul ein SendDebug bei ReceiveData einbauen, ohne vorher einen Filter zu setzen.
    Warum ist das wichtig?
    Weil das JSON bestimmte Zeichen maskiert, vermutlich ist mein Beispiel oben auch falsch, da die doppelten Hochkomma im JSON maskiert sind ( vermutlich /" ).
    Das ist dann aber auch falsch.
    Code:
    .*\"nukiId\": 987654321.*
    Weil RegEx \ auch zum maskieren nutzt.
    Das hier könnte funktionieren:
    PHP-Code:
    $this->SetReceiveDataFilter(preg_quote('.*\"nukiId\": 987654321.*')); 
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  5. #5
    Registriert seit
    Oct 2014
    Beiträge
    585

    Hallo Michael,

    danke für deine Tips. Auf die schnelle hat das nicht funktioniert.

    Ich schaue später noch einmal in Ruhe.

    Vielen Dank!


    Uli

  6. #6
    Registriert seit
    Feb 2018
    Ort
    Bochum
    Beiträge
    648

    Zitat Zitat von Nall-chan Beitrag anzeigen
    Das hier könnte funktionieren:
    PHP-Code:
    $this->SetReceiveDataFilter(preg_quote('.*\"nukiId\": 987654321.*')); 
    Michael

    PHP-Code:
    preg_quote('.*\"nukiId\": 987654321.*'
    ergibt
    PHP-Code:
    \.\*\\"nukiId\\"\: 987654321\.\* 
    ich würde das so machen:

    PHP-Code:
    $this->SetReceiveDataFilter('.*\\\"nukiId\\\": 987654321.*'); 
    oder so:

    PHP-Code:
    $this->SetReceiveDataFilter('.* nukiId[^:]*: 987654321.*'); 
    Noch ein Hinweis:

    der Wert 987654321 ist ja hier als Zahl ausgegeben worden. Mir ist passiert, das bei der Weiterverarbeitung und Weiterleitung dann der Wert als String interpretiert und dem zufolge ebenfalls in Hochkomma gesetzt wurde.

    Damit fängt man m.E. alle Fällen ab

    PHP-Code:
    $this->SetReceiveDataFilter('.*nukiId\\\":[ \\\"]*987654321[\\\”]*.*'); 
    1. ob Wert mit oder ohne Hochkomma
    2. ob nach dem Doppelpunkt ein Leerzeichen kommt oder nicht

    demel

  7. #7
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,037

    Zitat Zitat von demel42 Beitrag anzeigen
    PHP-Code:
    preg_quote('.*\"nukiId\": 987654321.*'
    ergibt
    PHP-Code:
    \.\*\\"nukiId\\"\: 987654321\.\* 
    Ah, sorry hast recht.
    So sollte das sein:
    PHP-Code:
    $this->SetReceiveDataFilter('.*'.preg_quote('\"nukiId\": 987654321').'.*'); 
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  8. #8
    Registriert seit
    Oct 2014
    Beiträge
    585

    Danke an Alle, funktioniert jetzt !

    Uli

Ähnliche Themen

  1. Probleme mit SetReceiveDataFilter
    Von baba im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 26
    Letzter Beitrag: 22.08.19, 07:31
  2. ...auf Kriegsfuss mit RegEx und preg_match...
    Von JPaeper im Forum Skripte, PHP, SQL
    Antworten: 16
    Letzter Beitrag: 04.06.19, 06:58
  3. Problem mit RegEx-Syntax
    Von JPaeper im Forum Skripte, PHP, SQL
    Antworten: 2
    Letzter Beitrag: 28.04.17, 11:39
  4. Regex im Editor für Suchen und Ersetzen
    Von jwka im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 5
    Letzter Beitrag: 03.10.10, 19:32