preg_match als array um Hostnamen zu filtern?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • preg_match als array um Hostnamen zu filtern?

    Hallo!

    Ich versuche mich grade an einen Teil im Script der die Hostnamen herausfiltern soll. Leider bekomme ich kein Ergebnis was mir zu sagt:

    PHP Code:
    <?php

        $neu_link 
    "http://www.google.de/search?hl=&q=*Max+Muster+Musterstr.+10+99999+Musterhausen";
        
    $seite file_get_contents($neu_link);

        
    preg_match ('@^(?:http://)?([^/]+)@i'"$seite"$result);
        
    $host  $result[1];

        
    preg_match('/[^.]+\.[^.]+$/'$host $result);

        
    $resulthtml = array();
        foreach (
    $result as $r) {
        
    $resulthtml[] = array('url' => htmlentities($r[1]),);
        }

        echo 
    '<pre>';
        
    print_r($resulthtml);
        echo 
    '</pre>';

        
    $resultlist[0] = array();
        foreach (
    $result as $r) {
        
    $resultlist[] = array('url' => $r[1]);
        }
    ?>
    Folgende Script funktioniert mit Manuel eingegeben Adresse super:

    PHP Code:
    <?php

        $neu_link 
    "http://www.google.de/search?hl=&q=*Max+Muster+Musterstr.+10+99999+Musterhausen";

        
    preg_match ('@^(?:http://)?([^/]+)@i'"$neu_link"$result);
        
    $host  $result[1];

        
    preg_match('/[^.]+\.[^.]+$/'$host $result);
        Echo 
    "Der Domänen-Name lautet: {$result[0]}\n";

    ?>
    Ich wollte per Script für 10 URLs / Hostnamen auch nur 10 Zeilen haben... hab zwar eine Script mit preg_match_all was funktioniert, wo aber dass Such Ergebnis unzureichend ist da mir die kompletten teilweise ca 100 oder mehr Zeichen langen URLs anzeigt:

    PHP Code:
    <?php

    $neu_link 
    "http://www.google.de/search?hl=&q=*Max+Muster+Musterstr.+10+99999+Musterhausen";
    $seite file_get_contents($neu_link);

    preg_match_all('/<h3[^>]*><a[^>]+href="([^"]*)"[^>]*>(.+?)<\/a>/'$seite$resultPREG_SET_ORDER);

    $resulthtml = array();
    foreach (
    $result as $r) {
    $resulthtml[] = array('url' => htmlentities($r[1]),);
    }
    echo 
    '<pre>';
    print_r($resulthtml);
    echo 
    '</pre>';

    $resultlist = array();
    foreach (
    $result as $r) {
    $resultlist[] = array('url' => $r[1]);
    }
    ?>
    Ich suche also entweder Hilfe beim letzten Script um dort die Suchaktion auf das Level des zweiten Scripts zu bekommen (Reguläre Ausdrücke) Oder bei Zweiten Script das vorzeigebare mit array zu arbeiten. Soll in einen Script integriert werden was ich schon einige Themen unter diesen erwähnt habe

    lg

    CC

  • #2
    Nimm doch einfach parse_url
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Comment


    • #3
      Hi unset,

      ich kann doch mit parse_url nur eine URL von Seite zu Seite übergeben?

      Ich brauche aber ein Script was ca 10-12 URLs auf einer Seite findet und diese auch ausgibt damit ich dieser wieder an die Datenbank weiter geben kann.

      Liebe Grüße

      CC

      Comment


      • #4
        Sooo nach langem Suchen, habe ich in Englischsprachigen Foren einiges gefunden.

        preg_match als array funktioniert nicht!

        Alternativ geht es aber mir preg_replace

        Beispiel #2 Die Verwendung von preg_replace() mit indizierten Arrays

        PHP Code:
        <?php
        $zeichenkette 
        'Der schnelle braune Fuchs sprang über den faulen Hund.';

        $suchmuster = array();
        $suchmuster[0] = '/schnelle/';
        $suchmuster[1] = '/braune/';
        $suchmuster[2] = '/Fuchs/';

        $ersetzungen = array();
        $ersetzungen[2] = 'Bär';
        $ersetzungen[1] = 'schwarze';
        $ersetzungen[0] = 'langsame';

        echo 
        preg_replace($suchmuster$ersetzungen$zeichenkette);
        ?>
        Quelle: PHP: preg_replace - Manual

        Versuche es mal morgen ^^ und melde poste mein Ergebnis für die, die wie ich auf der Suche nach dieser Funktion sind.

        lg

        CC

        PS: frohes neues Jahr!

        Comment


        • #5
          Falscher Ansatz. Du willst doch nichts ersetzen, du willst nur finden. Und du brauchst auch kein Array.
          Um alle Hostnamen im Quelltext einer Seite zu finden, genügt es, einen einzigen regulären Ausdruck zu konstruieren. Diesen Ausdruck verfütterst du dann an preg_match_all().

          Versuchs mal damit: /(href|src)=(["'])([^\/]//)?(.*)(\/[^$2]*)?$2/Ui

          Wenn das Gesucht in den $matches ist, kannst du den Ausdruck ja noch verfeinern, z.B. mit non-capturing subpatterns.
          Last edited by onemorenerd; 01-01-2011, 23:14.

          Comment


          • #6


            Dann versuche ich es mal mit deinem vorschlag und poste im laufe des tages mein Ergebnis

            Comment


            • #7
              Hi

              hat leider nicht funktioniert

              Fehler:
              Parse error: syntax error, unexpected ']' in /www/htdocs/w00644be/script/test8.php5 on line 6

              PHP Code:
              <?php

              $neu_link 
              "http://www.google.de/search?hl=&q=*Muster+Müller+Musterstr.+1+99999+Musterstadt";
              $seite file_get_contents($neu_link);

              preg_match_all('/(href|src)=(["'])([^\/]/)?(.*)(\/[^$2]*)?$2/Ui', $seite, $result, PREG_SET_ORDER);

              $resulthtml = array();
              foreach ($result as $r) {
              $resulthtml[] = array('
              url' => htmlentities($r[1]),);
              }
              echo '
              <pre>';
              print_r($resulthtml);
              echo '
              </pre>';

              $resultlist = array();
              foreach ($result as $r) {
              $resultlist[] = array('
              url' => $r[1]);
              }

              ?>
              Ich habe schon versucht

              '/<h3[^>]*><a[^>]+href="([^"]*)"[^>]*>(.+?)<\/a>/'

              so abzuändern, dass er mir die Links nur bis zum dritten "/" anzeigt aber ohne erfolg

              Liebe Grüße

              CC

              Comment


              • #8
                Die Fehlermeldung ist aber eindeutig. Anhand des Syntax Highlightings solltest Du hier im Forum schon sehen, wo der Fehler liegt. Kleiner Tip: Du hast ein Zeichen nicht escaped.
                MM Newmedia | MeinBlog

                Comment

                Working...
                X