sirius6b: Regulärer Ausdruck für die Suche nach einer IP

Hallo,

ich habe eine Ausgabe die ich nach einer IP durchsuchen möchte.

ppp0      Link encap:-Point-Point Protocol
          inet addr:84.56.138.25  P-t-P:84.56.128.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:31806 errors:0 dropped:0 overruns:0 frame:0
          TX packets:34605 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:9066343 (8.6 MiB)  TX bytes:7241126 (6.9 MiB)

jetzt würde ich mit einem RegEX gerne den Wert von "inet addr:" herausbekommen, also die IP. Kann mir einer einen Denkansatz geben?

Ich habe schon ewig nichts mehr mit Regulären Ausdrücken gemacht und weiß nicht wirklich wo ich anfangen soll...

Dankeschön und Gruß,
sirius6b

  1. Hi sirius6b,

    jetzt würde ich mit einem RegEX gerne den Wert von "inet addr:" herausbekommen, also die IP. Kann mir einer einen Denkansatz geben?

    Die Funktion preg_match() und http://tut.php-q.net/regex.html, falls Verständnissprobleme existieren.

    Eine IP sieht Strukturmäßig so aus:

    84             .           56             .            138           .            25
    1 bis 3 Zahlen, ein Punkt, 1 bis 3 Zahlen, ein Punkt, 1 bis 3 Zahlen, ein Punkt, 1 bis 3 Zahlen

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Werbung ist der Versuch, das Denkvermögen des Menschen so lange außer Kraft zu setzen, bis er genügend Geld ausgegeben hat. (Ambrose Bierce)
    1. Hallo Dennis,

      Die Funktion preg_match() und http://tut.php-q.net/regex.html, falls Verständnissprobleme existieren.

      könnte ich mit diesem Ausdruck Erfolg haben?
      preg_match("/inet addr:([0-9]{1,3}(.*)[0-9]{1,3}(.*)[0-9]{1,3}(.*)[0-9]{1,3}/", $eingabe, $matches);

      Grüße und Danke schon einmal,
      sirius6b

      1. Kleiner Nachtrag...

        preg_match("/inet addr:([0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3})/", $eingabe, $matches);

        bzw. so müsste er eigentlich mehr sinn machen...

        Gruß,
        sirius6b

        1. Hallo!

          preg_match("/inet addr:([0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3})/", $eingabe, $matches);

          Ich bin absolut kein Experte zu regulären Ausdrücken, aber würde es nicht noch mehr sinn machen, wenn du zwischen den Zahlenblöcken immer nur nach einem Punkt suchst anstatt nach einem x-beliebigem Zeichen, das auch noch x-beliebig oft vorkommen darf?

          Also mein Vorschlag wäre
          preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/", $eingabe, $matches);
          Die IP steht dann in $matches[1].

          Michael

          1. Hallo Bevan,

            Also mein Vorschlag wäre
            preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/", $eingabe, $matches);
            Die IP steht dann in $matches[1].

            ja, würde mehr Sinn machen. Wie gesagt, ist ewig her. Ich habe hier auf dem Rechner leider gerade kein PHP installiert. Weiß jemand eine Seite wo ich das testen kann?

            Vielen Dank auf jeden Fall schonmal von mir!

            Gruß,
            sirius6b

            1. Ja, habe das ganze mal bei mir upgeloadet:

              http://www.bi-co.net/Bevan/regexp.php

              Der Code der Seite lautet einfach nur:

              <?php
              $text = 'ppp0      Link encap:-Point-Point Protocol
                        inet addr:84.56.138.25  P-t-P:84.56.128.1  Mask:255.255.255.255
                        UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
                        RX packets:31806 errors:0 dropped:0 overruns:0 frame:0
                        TX packets:34605 errors:0 dropped:0 overruns:0 carrier:0
                        collisions:0 txqueuelen:3
                        RX bytes:9066343 (8.6 MiB)  TX bytes:7241126 (6.9 MiB)';
              preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/", $text, $ip);
              print_r ($ip);
              ?>

              Ich weiß, dass die Seite kein valides HTML erzeugt ;-)

              Michael

              1. Hallo Bevan,

                http://www.bi-co.net/Bevan/regexp.php

                Ich danke Dir!

                Ich weiß, dass die Seite kein valides HTML erzeugt ;-)

                Eine Unverschämtheit! Und das hier in diesem Forum! :-)

                Gruß,
                sirius6b

              2. Hallo Bevan,

                mal interessehalber: könnte ich die wiederholten Teile hier eventuell abkürzen?

                preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/

                vielleicht so oder so ähnlich?
                /inet addr:(([0-9]{1,3}.){,3}[0-9]{1,3})/

                Gruß,
                sirius6b

        2. Hi sirius6b,

          preg_match("/inet addr:([0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3})/", $eingabe, $matches);
          bzw. so müsste er eigentlich mehr sinn machen...

          Vorher war nur ein kleiner Fehler mit den Klammern - ( - drin, am RegEx selber hat sich nicht viel geändert.

          Ich halte noch mal kurz fest: Der Punkt matched, sofern er nicht innerhalb von eckigen Klammern (also innerhalb einer Zeichneklasse) vorkommt jedes beliebige Zeichen, abgesehen von einem Zeilenumbruch.
          Um einen Punkt selber zu fassen, kannst du entweder . schreiben, es würde aber auch [.] funktionieren.

          Das Zeichen * steht für ein beliebig häufiges Vorkommen, dazu gehört auch 0 mal. Ebenso gibt es noch +, welches zwar ebenfalls für bis unendlich gilt, aber erst von 1 an. Das Zeichen müsste dann also mindestens einmal vorkommen.

          Das [0-9] kannst du außerdem noch kürzer schreiben, indem du \d verwendest. \d steht für Digit und matched eine beliebige Zahl. Alternativ gibt es auch noch \D, was alles außer einer Zahl matched. Weitere solche Kürzel findest du im PHP Manual unter PCRE Pattern Syntas - backslashes bei "The third use of backslash".

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker von WWWTech gehören und nicht hier her?