xNeTworKx: Reg. Exp., die Zweite

Hallo,

ich hab da ein kleines Problem. Ich habe einen regulären Ausdruck, der Übereinstimmungen in einem Text umwandelt :

while ($text =~ /[link](.+)[/link]/g)   {
      my $image = "<a href="$1" target="parent">$1</a>";
      $text =~ s/[link].+[/link]/$image/;
      }

Jetzt ist es aber so, wenn es im Text so aussieht [link]blablabla.html[/link] mehr text mehr text [link]neuerlink.html[/link] , er alles zwischen dem ersten [link] und letzten [/link] als Link sieht. Wie kann ich den regulären Ausdruck so ändern, daß er jeden Link seperat erkennt ?

  1. Hallo,

    ich hab da ein kleines Problem. Ich habe einen regulären Ausdruck, der Übereinstimmungen in einem Text umwandelt :

    while ($text =~ /[link](.+)[/link]/g)   {
          my $image = "<a href="$1" target="parent">$1</a>";
          $text =~ s/[link].+[/link]/$image/;
          }

    Jetzt ist es aber so, wenn es im Text so aussieht [link]blablabla.html[/link] mehr text mehr text [link]neuerlink.html[/link] , er alles zwischen dem ersten [link] und letzten [/link] als Link sieht. Wie kann ich den regulären Ausdruck so ändern, daß er jeden Link seperat erkennt ?

    Mit (.+) suchst du zwischen den beiden Ausdrücken [link] und [/link] nach MAXIMAL VIELEN Zeichen (greedy - gierig).

    Abhilfe: Nimm (.+?) Das Fragezeichen macht den Suchoperator non-greedy, du suchst nach MINIMAL WENIGEN Zeichen (würde schon helfen).

    Oder du suchst nach "[link]", dann nach allem, was NICHT "[/link]" ist, und dann nach "[/link]".

    Du solltest beachten, daß Leute auch dummes Zeug in die URL eingeben könnten. Vielleicht ist es schlauer, genau wie in diesem Forum lieber nach "[link]GÜLTIGE_URL[/link]" zu suchen, und nicht nur nach irgendwelchen beliebigen Zeichen.

    - Sven Rautenberg

    1. Hallo,
      jetzt, mit dem ? klappt es danke.

      Du solltest beachten, daß Leute auch dummes Zeug in die URL eingeben könnten. Vielleicht ist es schlauer, genau wie in diesem Forum lieber nach "[link]GÜLTIGE_URL[/link]" zu suchen, und nicht nur nach irgendwelchen beliebigen Zeichen.

      Da hast du Recht, ich hab bei der Homepage, und Email Eingabe so etwas gemacht, wahrscheinlich werd ichs hier auch noch machen, aber die Feinheiten kommen dann am Schluss.

      1. Moin nochmal!

        Da hast du Recht, ich hab bei der Homepage, und Email Eingabe so etwas gemacht, wahrscheinlich werd ichs hier auch noch machen, aber die Feinheiten kommen dann am Schluss.

        Tja, während man bei URLs direkt nachgucken kann, ob sie a) gültig sind und b) existieren, kann man das bei EMail-Adressen nicht. Wurde auch schon lang und breit im Forum diskutiert, warum es nicht geht.

        - Sven Rautenberg

        1. Hoi,

          Tja, während man bei URLs direkt nachgucken kann, ob sie a) gültig
          sind und b) existieren, kann man das bei EMail-Adressen nicht.

          Das wage ich zu bezweifeln ;-) Das Ueberpruefen auf die Gueltigkeit
          einer eMail-Adresse ist durchaus moeglich. Auch das Ueberpruefen auf
          die Existenz ist zumindest manchmal moeglich: VRFY ist dein Freund.

          Wurde auch schon lang und breit im Forum diskutiert, warum es nicht
          geht.

          Da wurde aber gesagt, dass das Pruefen, ob eine eMail-Adresse *gueltig*
          sei, durchaus moeglich ist. Nur das Ueberpruefen auf die Existenz kann
          Probleme bereiten.

          Gruesse,
           CK

  2. Hi,

    ich hab da ein kleines Problem.

    while ($text =~ /[link](.+)[/link]/g)   {
          my $image = "<a href="$1" target="parent">$1</a>";
          $text =~ s/[link].+[/link]/$image/;
          }

    Jetzt ist es aber so, wenn es im Text so aussieht [link]blablabla.html[/link] mehr text mehr text [link]neuerlink.html[/link] , er alles zwischen dem ersten [link] und letzten [/link] als Link sieht. Wie kann ich den regulären Ausdruck so ändern, daß er jeden Link seperat erkennt ?

    Du brauchst einen "nichtgefräßigkeits operator" - non-greedy.
    und der ist ein Fragezeichen.
    /[link](.+?)[/link]/g müsste eigentlich reichen.
    http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#gierig_genuegsam

    bye eddie