Ankündigung

Einklappen
Keine Ankündigung bisher.

REGEX gelingt einfach nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    REGEX gelingt einfach nicht

    Ich habe eine Datei (Test.html) in der einzig diese Zeile steht: das ist eine Ip-Adresse (111.111.111.111).

    Die IP-Adresse soll nun in ein String Item, aber es gelingt mir einfach nicht. Ich habe alles mögliche versucht, bekomme aber nicht die IP-Adresse "rausgeschnitten".

    Auch das maskieren der Klammern hat keinen Erfolg gehabt.

    REGEX((.*\((.*)\))

    Hat jemand eine Idee?




    #2
    Die Regex sollte eher so aussehen:
    Code:
    (?:[0-9]{1,3}\.){3}[0-9]{1,3}
    Wenn nicht mehr in deinem Quelltext stehen wird, geht auch ein
    Code:
    (.*?)

    Kommentar


      #3
      Der Text lautet:

      Das ist eine IP-Adresse (111.111.1.11)

      Das Problem ist wohl das maskieren der Klammern.

      Kommentar


        #4
        Ich hab die Lösung gefunden, danke für deine Bemühungen.

        REGEX(.*\\((.*)\\).*)

        Kommentar


          #5
          Ich habe gerade festgestellt, dass dies wirklich nur funzt, wenn die Datei nur den einen Eintrag hat. Hat sie aber folgenden Eintrag

          Das ist eine IP-Adresse (111.111.1.11) Das ist noch eine IP-Adresse (222.222.2.22)

          gibt er mir immer den gesamten Text aus.

          REGEX(.noch eine\\((.*)\\).*) funzt auch nicht, kommt auch immer der gesamte Text.

          Vielleicht kann noch mal jemand weiterhelfen

          Kommentar


            #6
            bin nicht ganz sicher was du meinst, suchst du evtl sowas? http://regexr.com/3ee0r Grüße
            Zuletzt geändert von Caesium; 12.10.2016, 11:40. Grund: Regexp geupdated.

            Kommentar


              #7

              Das auch nicht ganz, ich versuche mal es besser zu erklären.
              Ich scanne das Netzwerk mir zwei sh Scripten und schreibe das Ergebnis in eine Datei - xxx.html.
              Dort steht dann der Name des Rechners und die IP in Form von - Haus-Licht (111.111.111.11) Haus-Kamera (111.111.111.12) Rechner-Otto (111.111.111.20) u.s.w

              Nun sollen die IP Adressen in ein Item.

              Klar, ich könnte sie einfach reinschreiben, aber genau das will ich nicht. Ich will ein Echtzeitabbild, deshalb die Netzwerkscans.

              Ich benutze fritzboxtr064 und prüfe anhand der Macadresse, setze damit die Geräte auf grün oder rot.
              Ich benutze nh mit Port für Dienste und stelle fest ob sie laufen.
              Jetzt müssen noch anhand der Macadressen die IP Adressen ausgelesen werden.
              Eventuell sollen noch die offenen Ports angezeigt werden.
              Es werden noch alle wichtigen Systemdaten des "Hausservers" angezeigt.

              REGEX(.*\\((.*)\\).*) funzt nur, wenn ein Item da ist
              REGEX(.*Haus\\-Licht\\((.*?)\\).*) gibt den gesamten Text der Datei aus
              REGEX(.*Haus\\-Licht(.*?)\\).*) gibt (111.111.111.11 aus

              Das nun folgende Problem ist, wenn der Rechner/Gerät nicht mehr im Netz ist, dann kommt als Ausgabe wieder der gesamte Dateiinhalt.

              Vielleicht verfolge ich auch den falschen Ansatz. Im allgemeinen schreibe ich lieber immer alles mögliche in Rules und Scripte.

              Vielleicht wäre dieser Ansatz hier besser.
              Ich müsste mal probieren nmap und arp (wobei die arp Abfrage sudo braucht) in Rules einzuarbeiten, oder die Abfragen zu lassen und dann mit einer Rules auf diese zuzugreifen.

              Wer noch eine Idee hat, immer her damit.

              Kommentar


                #8
                ok, DNS kommt nicht in Frage, du willst auch unbekannte Rechner Monitoren? Ich habe sowas am laufen:
                frank@atom:/usr/share/openhab/scripts$ cat ping.sh
                #!/bin/bash
                if [ -z "$1" ] ;then
                echo "So geht das nicht"
                exit 1;
                fi

                ping -c1 $1 > /dev/null

                if [ $? -ne 0 ]; then
                echo "OFF"
                else
                echo "ON"
                fi
                frank@atom:/usr/share/openhab/scripts$ grep ping.sh ../configurations/items/default.items
                Switch WST126 "PI Garage" { exec="<[scripts/ping.sh raspberrypi:60000:REGEX((.*?))]" }
                Switch WST129 "Vodka" { exec="<[scripts/ping.sh vodka:60000:REGEX((.*?))]" }
                Switch NH_INET "Internetverbindung" { exec="<[scripts/ping.sh 8.8.8.8:60000:REGEX((.*?))]" }
                Switch NH_ATOM "VPN Atom" { exec="<[scripts/ping.sh 192.168.178.1:60000:REGEX((.*?))]" }


                Und in den Sitemaps dazu:

                Text item=NH_INET label="Internetverbindung ist [MAP(nh.map):%s]" icon="computer" visibility=[NH_INET==OFF]
                Text item=NH_ATOM label="VPN Atom ist [MAP(nh.map):%s]" icon="computer" visibility=[NH_ATOM==OFF]


                Sind also nur sichtbar wenn was schief läuft.
                Zuletzt geändert von Caesium; 12.10.2016, 15:29.

                Kommentar


                  #9
                  Grundsätzlich wäre dein Beispiel ok, nur möchte ich die Sache auf einen Netzwerkscan aufbauen.
                  Stell die vor, du kommst irgendwo hin, wo du die Umgebung nicht kennst und da soll das Script auch laufen. Dann änderst du nur im Script
                  den IP Adressenbereich und setzt Items und schon kann es los gehen. Mal abgesehen davon, dass das dann eben Echtzeit ist und es laufen wird, egal was sich im Netzwerk an Aktoren ändert, hab ich auch ein recht umfangreiches Netzwerk, und bis ich da gefühlt 100 IP Adressen hingeschrieben habe, hat sich wieder etwas verändert. Ich versuche damit auch den "Pflegeaufwand" gering zu halten, indem ich angefangen habe, vieles über Sripte abzuhandeln, dann muss ich zwar mal ein Item dazusetzen/löschen, aber für viele Items nur ein Script ändern.

                  Aber auf jeden Fall Danke für deinen Vorschlag.

                  Kommentar

                  Lädt...
                  X