ThomasP: Wieder mal regex - Problem

Hallo!

Diese regulaeren Ausdruecke bringen mich noch um den Verstand. X-)

Ich habe versucht, wie in http://www.teamone.de/selfhtml/sfarchiv/1999_4/t09020.htm#a45703 beschrieben, mit

@result=($input=~ /<a.*>(.*)</a>/gsi);

aus einem Dateiinhalt die Anker auszulesen. @result hat aber immer nur einen Wert, obwohl es mindestens 10 sein muessten.

Fuer Hilfe dankbar *g*

Gruß
Thomas

  1. Hi,

    Ich habe versucht, wie in <../../sfarchiv/1999_4/t09020.htm#a45703> beschrieben, mit
    @result=($input=~ /<a.*>(.*)</a>/gsi);
    aus einem Dateiinhalt die Anker auszulesen. @result hat aber immer nur einen Wert, obwohl es mindestens 10 sein muessten.

    ".*" ist "greedy". Versuch doch mal "[^>]+".

    mfG - Michael

    1. Hi Michael!

      Leider das gleiche Ergebnis. Koennte es an der Multiline liegen? Ich habe zwar die einzelnen Zeilen mit join zusammengefuegt und es duerften keine \n's mehr drin sein, aber wer weiss?
      Sinnigerweise steht in @result immer nur der letzte match.

      Vielleicht faellt Dir noch was ein *g*

      Gruß
      Thomas

      1. Hallo Thomas,

        Ich hab` die Idee von Michael aufgegriffen, aber leicht abgeändert: * mit ? ein wenig weniger gierig gemacht.

        Damit funktionierts bei folgendem Text:

        $input = <<EOT;
        <html>
        <head>
        <title>Test</title>
        </head>
        <body>
        <a href="beig">Test1</a>
        <a href="beig">Test2</a>
        <a href="beig">Test3</a>
        <a href="beig">Test4</a>
        Das ist die Testdatei
        </body>
        </html>
        EOT

        @result=($input=~ /<a.*?>(.*?)</a>/gsi);
        print @result;

        ergibt Test1Test2Test3Test4

        Gruß AlexBausW

        1. Hallo Alex!

          Wunderbar! Es funzt!
          Danke Dir! Wieder ein Schritt weiter zum regex-Guru :))