[REGEX] Worte zu Links

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    @Benny-one
    Also wenn du URL im Text hast, dann läuft dein RegExp in die Falle
    Code:
    $text = 'Das ist einb blub text <a href="http://www.google.com">google</a> der ads peter kr.';
    
    $text = preg_replace('/(.*?)(blub|google|peter)(.*?)/i', '$1<a href="http://www.google.de/">$2</a>$3', $text);
    
    echo '<pre>';
    print_r($text);
    echo '</pre>';
    
    //Ergebnis
    <pre>Das ist einb <a href="http://www.google.de/">blub</a> text 
    <a href="http://www.<a href="http://www.google.de/">google</a>.com">
    <a href="http://www.google.de/">google</a></a> der ads
     <a href="http://www.google.de/">peter</a> kr.</pre>
    Mit PHP 5 auf FreeBSD und PHP4 dito...

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #17
      mein gott, rede ich hier mit Bäumen.

      ALLE meine Beispiele waren OHNE URL. MIT URL ist mir auch klar, dass das dann nicht mehr geht.
      Sunshine CMS
      BannerAdManagement
      Borlabs - because we make IT easier
      Formulargenerator [color=red]Neu![/color]
      Herkunftsstatistik [color=red]Neu![/color]

      Kommentar


      • #18
        *ditsch*

        Genau dadrum gings ja


        @Jahlives: Komm leider mit deinem Tipp auch nicht weiter. Der findet bei mir mit

        Code:
        $link = "http://www.example.com";
        $suchwort = 'blub';
        
        $text = '<p>Test huhu <a href="http://www.blub.de">blub</a> das ist ein blub Test</p>';
        
        $regex = "/((<[^>]*)|\b$suchwort\B)/ie";
        
        $replace = "<a href=\"".$link."\" target=\"_blank\">\\0</a>";
        
        $text = preg_replace("/((<[^>]*)|\b".$suchwort."\B)/ei",'"\\2"=="\\1" ? "\\1" : "'.$replace.'"', $text);
        leider einen Fehler, den ich gerade nicht richtig zurück führen kann:


        Parse error: syntax error, unexpected T_STRING in (filename): regexp code on line 1

        Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: &quot;&lt;p&quot;==&quot;&lt;p&quot; ? &quot;&lt;p&quot; : &quot;&lt;a href=&quot;http://www.example.com&quot; target=&quot;_blank&quot;&gt;&lt;p&lt;/a&gt;&quot;


        Anscheinend irgendwas, das er mit dem öffnenden P nicht klar kommt.

        Kommentar


        • #19
          Nicht aufregen Benny-one.
          Aber da prego ja in seiner Problemstellung klar darauf hingewiesen hat, dass er den RegExp für URLs braucht, könnte man behaupten, dass deine Antworten etwas am Ziel vorbeigeschossen sind
          @prego
          Code:
          <?php
          $link = "http://www.example.com";
          $suchwort = 'blub';
          
          $text = '<p>Test huhu <a href="http://www.blub.de">blub</a> das ist ein blub Test</p>';
          
          $test = preg_replace("/((<[^>]*)|$suchwort)/ei",'"\\2"=="\\1"? "\\1" : "<a href=\"{$link}\">\\0</a>"',$text);
          echo $test;
          //ergibt
          <p>Test huhu <a href="http://www.blub.de"><a href="http://www.example.com">blub</a></a> das ist ein <a href="http://www.example.com">blub</a> Test</p>
          funzt bei mir einwandfrei (du hat ein " nicht escaped)

          Gruss

          tobi
          Zuletzt geändert von jahlives; 22.03.2007, 11:08.
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #20
            Danke Tobi.

            Allerdings noch nicht ganz. Sorry wenn ich mich grad ein bischen dumm anstelle, aber ich jetzt mal dein Beispiel c&p't und es kommt folgendes raus:

            <p><p>Test huhu <a href="http://www.blub.de">blub</a> das ist ein blub Test</p>
            Er verdoppelt das öffnende P und ersetzt nichts. Das blub bei Test am ende des Strings sollte ja ersetzt werden.

            Danke für eure Hilfe.

            Kommentar


            • #21
              Also bei mir http://tobisworld.ch/test.php funzt es einwandfrei. Nix doppeltes <p> oder so...
              Habe die Ersetzung mal mit span gemacht, damit man sie besser sieht.
              Code:
              <?php
              $link = "http://www.example.com";
              $suchwort = 'blub';
              
              $text = '<p>Test huhu <a href="http://www.blub.de">blub</a> das ist ein blub Test</p>';
              
              $test = preg_replace("/((<[^>]*)|$suchwort)/ei",'"\\2"=="\\1"? "\\1" : "<span style=\"background-color:yellow;\">\\0</span>"',$text);
              echo 'Ausgabe des Codes:'.$test;
              ?>
              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #22
                Ok, vergiss das mit dem <p> - das kam von mir.

                Jetz funktioniert es komischerweise auch, nur leider gibt es ja da noch ein Problem. Wenn der Text schon IN einem Link ist, soll es ja auch nicht ersetzt werden...


                Code:
                $link = "http://www.example.com";
                $suchwort = 'blub';
                
                $text = '<p>Test huhu <a href="http://www.blub.de">blub</a> das ist ein blub Test</p>';
                
                $test = preg_replace("/((<[^>]*)|$suchwort)/ei",'"\\2"=="\\1"? "\\1" : "<a href=\"{$link}\">\\0</a>"',$text);
                echo 'Ausgabe des Codes:'.$test;

                Ergebniss:

                Code:
                Ausgabe des Codes:<p>Test huhu <a href="http://www.blub.de"><a href="http://www.example.com">blub</a></a> das ist ein <a href="http://www.example.com">blub</a> Test</p>
                Zuletzt geändert von prego; 22.03.2007, 11:44.

                Kommentar


                • #23
                  Dazu wüsste ich jetzt keinen Weg

                  Sorry und Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #24
                    @prego
                    Das einzige was mir noch einfiele damit test in <a href="">test</a> nicht markiert wird, wäre \b um den Suchbegriff, damit vorher und nachher eine Wortgrenze kommen muss (stolpert natürlich wenn der Linktext vorher und nachher ein Leerzeichen hat...)

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #25
                      Hmmm...

                      ist irgendwie alles nichts wahres. Vielleicht hat ja jemand ne rettende Idee. Ansonsten bauch ich nen Parser und schau halt pro Wort ob ich in nem A-Tag drin bin, oder nicht.

                      Vielen Dank Tobi.

                      Kommentar

                      Lädt...
                      X