[REGEX] Worte zu Links

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

  • [REGEX] Worte zu Links

    Moin,

    ich krichs grad nicht hin.

    Ich möchte in einem Stück Text vordefiniert Worte durch Links ersetzen. Allerdings durch nur Worte ersetzt werden, die zwischen Tags stehen, damit kein bestehender Link ungültig wird.

    Code:
    $regex = '/^(.*)?(lasagne)(.*)?$/imU';
    
    $replace = "\\1<a href=\"http://www.example.com\">\\2</a>\\3";
    
    $text = preg_replace($regex, $replace, $text);
    So weit, so gut. Mein Problem ist jetzt, das die Regex nicht zutrifft. Ich möchte ja, das das Wort gefunden wird ob es nun zwischen, vor, oder hinter einem Tag steht, aber eben nicht IM tag.

    Für Schubser in die richtige Richtung wäre ich dankbar. Evtl kann man das ganze auch insgesamt besser machen.

    Vielen Dank euch schonmal.

  • #2
    PHP-Code:
    <?php
    $text 
    'Das ist einb blub text der ads peter kr.';

    $text preg_replace('/(.*?)(blub|peter)(.*?)/i''$1<a href="http://www.google.de/">$2</a>$3'$text);

    echo 
    '<pre>';
    print_r($text);
    echo 
    '</pre>';
    ?>
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

    Kommentar


    • #3
      Danke Benny,

      so würde aber doch der Text auch innerhalb eines Links ersetzt werden.

      Beispiel:
      Das ist einb <a href="http://www.blub.de">blub</a> text der ads peter kr.


      Und genau das möchte ich vermeiden. Meiner Regex oben fehlt also Quasi das Sie nur die Worte ausserhalb von Tags findet. So irgendwie:

      Code:
      $regex = '/^(.*>)?'.$suchbegriff.'(.*<)?$/imU';

      Oder seh ich das falsch?
      Zuletzt geändert von prego; 22.03.2007, 11:01.

      Kommentar


      • #4
        PHP-Code:
        <?php
        $text 
        'Das ist einb blub text 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 der ads <a href="http://www.google.de/">peter</a> kr.</pre>
        Sunshine CMS
        BannerAdManagement
        Borlabs - because we make IT easier
        Formulargenerator [color=red]Neu![/color]
        Herkunftsstatistik [color=red]Neu![/color]

        Kommentar


        • #5
          PHP-Code:
          $text 'Das <a href="www.google.de">google</a> ist einb blub';

          $text preg_replace('/(.*?)(google)(.*?)/i''$1<a href="http://www.google.de/">$2</a>$3'$text); 
          Ergebnis:
          <pre>Das <a href="www.<a href="http://www.google.de/">google</a>.de">
          <a href="http:/www.google.de">google</a></a> ist ein blub</pre>


          Order nicht?

          Kommentar


          • #6
            Junge! Frag doch net als. Ich habe dir das Ergebnis gesendet, was herauskommt, wenn man den Schnipsel verwendet! Und da ist ja wohl alles richtig oder?!
            Sunshine CMS
            BannerAdManagement
            Borlabs - because we make IT easier
            Formulargenerator [color=red]Neu![/color]
            Herkunftsstatistik [color=red]Neu![/color]

            Kommentar


            • #7
              Eben nicht, weil es auch Teile in Tags ersetzt - siehe mein Beispiel. Und ich brauch es so, das es die Links die im Ausgangstext drin sind in Ruhe läßt. Das genau ist mein Problem.

              Wegen so nem Tinnef wie einfache Worte ersetzen brauch ich nicht ins Forum zu schreiben

              Ich komm doch nur grad mit meiner Regex nicht klar, so das sie keine Worte innerhalb von Tags findet.



              Ich möchte ja, das das Wort gefunden wird ob es nun zwischen, vor, oder hinter einem Tag steht, aber eben nicht IM tag.

              Kommentar


              • #8
                @Prego
                http://www.php-resource.de/forum/sho...5&pagenumber=2 funzt bei mir ganz wunderbar und ersetzt nur was nicht zwischen < und > steht.

                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


                • #9
                  Bei mir kommt wie gesagt mein gepostetes Ergebnis. Vll. liegts an meiner PHP 5.x Version.
                  Sunshine CMS
                  BannerAdManagement
                  Borlabs - because we make IT easier
                  Formulargenerator [color=red]Neu![/color]
                  Herkunftsstatistik [color=red]Neu![/color]

                  Kommentar


                  • #10
                    Nein. Dein Codeschnipsel ersetzt alle "google"'s die er findet - ob sie nun innerhalb, oder ausserhalb eines Tags sind - so weit war ich in meinem ersten Post auch schon.

                    <a href="www.google.de">google</a>

                    Ich möchte NUR das fettgedruckte ersetze, nicht das was evtl in den " steht.


                    Entweder versteh ICH dich komplett falsch, oder DU mich

                    Dank dir trotzdem. Schau mir grad den Link von Jahlives an.

                    Kommentar


                    • #11
                      @prego: Ich weiß was du meinst. Aber ich habe das Script bei mir getestet und es wurde nicht alles durch google ersetzt. Ich vermute es liegt an unterschiedlichen PHP Versionen die wir beide verwenden
                      Sunshine CMS
                      BannerAdManagement
                      Borlabs - because we make IT easier
                      Formulargenerator [color=red]Neu![/color]
                      Herkunftsstatistik [color=red]Neu![/color]

                      Kommentar


                      • #12
                        @Benny, ich habs gerade noch mal ausgiebig getestet. So wie im Ausgangstext das Suchwort innerhalb eines TagAttributes vorkommt wird es mit ersetzt. Somit wird der ursprüngliche Link leider ungültig. Meinst du das mit den PHP-Versionen ernst?

                        Kommentar


                        • #13
                          Original geschrieben von prego
                          Meinst du das mit den PHP-Versionen ernst?
                          Ja!

                          PHP Version 5.1.4
                          OS: Windows / Linux
                          Code:
                          PHP-Code:
                          <?php
                          $text 
                          'Das ist einb blub text 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 der ads <a href="http://www.google.de/">peter</a> kr.</pre>
                          Sunshine CMS
                          BannerAdManagement
                          Borlabs - because we make IT easier
                          Formulargenerator [color=red]Neu![/color]
                          Herkunftsstatistik [color=red]Neu![/color]

                          Kommentar


                          • #14
                            Dann versteh ich jetzt garnichts mehr:


                            PHP-Code:
                                    echo phpversion();

                                    
                            $text 'Das ist einb <a href="www.blub.de">blub</a> text 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>'
                            Ergebniss:
                            5.2.0

                            <pre>Das ist einb <a href="www.<a href="http://www.google.de/">blub</a>.de">
                            <a href="http://www.google.de/">blub</a></a> text der ads
                            <a href="http://www.google.de/">peter</a> kr.</pre>

                            Kommentar


                            • #15
                              achso, na das ist ja dann klar. Ich habe bisher immer ohne URL im Text gearbeitet.
                              Sunshine CMS
                              BannerAdManagement
                              Borlabs - because we make IT easier
                              Formulargenerator [color=red]Neu![/color]
                              Herkunftsstatistik [color=red]Neu![/color]

                              Kommentar

                              Lädt...
                              X