Zanda: regex

Hallo!

Jetzt mal ehrlich.. kommt ihr gut mit regex zurecht? Ich werde es soo wohl nie lernen...
Wie habt ihr euch das bei gebracht?

Bin grade auf http://www.regex-tester.de/regex.html aber selbst hier weis ich ja nicht was ich hier und da ändern muss damit ich meinen ergebnissen überhaupt näher kommen kann.

Möchte im Prinzip nur:

xyzxyz<A HREF="/what/ever/1223.htm">INHALT</A>xyzxyz usw

als

Array
(
    [0] => Array
        (
            [0] => "/what/ever/1223.htm"
            [1] => "INHALT"
        )
    [1] => Array ...
)

erhalten! :-)

Danke!
Zanda

  1. Salve

    Habs glücklicherweise noch nicht wirklich gebraucht^^
    Aber guck dir mal das an.

    --
    sh:( fo:| ch:? rl:( br:> n4:? ie:{ mo:) va:) js:| de:> zu:} fl:| ss:) ls:[  
  2. Hi,

    Möchte im Prinzip nur:

    und warum versuchst Du, Strukturen mit einer RegExp zu analysieren? Das klappt höchstens in Einzelfällen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Die Methode ist mir eigentlich egal.. Das Ergebnis ist mir wichtig :-)
      Wie würdest du das denn machen :-) ?

      Zanda

  3. Hallo!

    Für ein ähnliches Array-Layout eignet sich:

    /.*<A\W*HREF="(.+?)">(.+?)</A>.*/

    Kannst ja mal gucken, damit bekommst du die Einträge zwar nicht so, wie du willst, aber irgendwie scheine ich da mit der PHP-Funktion ein Problem zu haben, Perl bringts hier auf den Punkt! Für PHP musst du die Delemiter am Anfang/Ende weglassen!

    Grüße!

    1. <?php
      error_reporting(E_ALL);

      $string = <<<EOF
      <a href="/what/ever/1234.htm">INHALT</a><br>Quatsch</p><a href="/what/ever/12345.htm">INHALT2</a><br>Quatsch</p>
      EOF;

      $pattern = '/.*<A\W*HREF="(.+?)">(.+?)</A>.*/';
      preg_match_all($pattern, $string, $array);

      echo '<pre>', print_r($array, true), '</pre>';

      ?>

      bringt leider nur!:

      Array
      (
          [0] => Array
              (
              )

      [1] => Array
              (
              )

      [2] => Array
              (
              )

      )

      Danke
      Zanda

      1. $pattern = '/.*<A\W*HREF="(.+?)">(.+?)</A>.*/';

        ' != "

        Der string auf den das passen soll enthält die Zeichenfolge " nicht.

        1. PS: Mit einem i nach dem Pattern schaltet man die Unterscheidung von Groß- und Kleinschreibung aus.

          1. Habs

            preg_match_all ('/<a\W*href="(.+?)">(.+?)</a>/i'

            Na also...
            Danke!

            1. Habs

              preg_match_all ('/<a\W*href="(.+?)">(.+?)</a>/i'

              Nur noch als Hinweis, eventuell steht irgendwann mal nicht nur zwischen <a und href= irgendetwas, sondern auch zwischen href="..." und dem folgenden >. Eventuell steht an beiden Stellen auch irgendwan mal etwas, was Buchstaben, Zahl oder Unterstriche enthält, siehe dazu die Bedeutung von \W.

  4. preg_match_all ('|<a [^>]*href="([^">]*)"[^>]*>(.*)</a>|',
    'a<a href="b.htm">c</a>d
    e<a href="f.htm">g</a>h<a href="i.htm">j</a>
    k<a href="l.htm">m</a>n',
    $out, PREG_PATTERN_ORDER);
    print "<pre>";
    print_r ($out);
    print "</pre>";

    doch findet dieser code leider nur einen Link pro Zeile! - Wieso?

    Array
    (
        [0] => Array
            (
                [0] => c
                [1] => ghj
                [2] => m
            )

    [1] => Array
            (
                [0] => b.htm
                [1] => f.htm
                [2] => l.htm
            )

    [2] => Array
            (
                [0] => c
                [1] => ghj
                [2] => m
            )

    )

    Zanda

    1. doch findet dieser code leider nur einen Link pro Zeile!

      Auch das tut er nicht, schau Dir dein Ergebnis mal richtig an.

      1. Auch das tut er nicht, schau Dir dein Ergebnis mal richtig an.

        Hä? was meinst du?
        i.htm fehlt doch im Ergebnis!

        Zanda

        1. Aber h und j sind drin.