[REGEX] Links einsezten

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

  • [REGEX] Links einsezten

    Hallo,

    Ich habe folgendes Problem:

    Ich habe einen String mit einem HTML Code. Natürlich enthält dieser String auch Links sowie einige Style Zuweisungen (<div class="bsp">content</div>).

    Nun möchte ich einige Wörter mit einem Link belegen. Allerdings tritt hier das Problem auf, dass die HTML Tags mit ersetzt werden, da ich nur die einfach str_replace Funktion verwendet habe.

    Mir ist bekannt, das es über einen regulären Ausdruck möglich ist, allerdings fehlt mir die Erfahrung bei dem Umgang mit Regex.

    Gruß

    Voter

  • #2
    Schau mal in unsere Tutorials. da ist n sehr schönes über Regex drin versuch mal n bisschen und Poste bei Problemen hier im Thread.

    Kommentar


    • #3
      Ich schaffe es einfach nicht, die regulären Ausdrücke waren schon immer mein Problem. Könne mir jemande helfen?

      Kommentar


      • #4
        gib mal einen beispieltext und auch den text, wie es danach aussehen soll.

        und hierfür:
        >Nun möchte ich einige Wörter mit einem Link belegen. Allerdings tritt hier das Problem auf, dass die HTML Tags mit ersetzt werden, da ich nur die einfach str_replace Funktion verwendet habe.

        auch ein bsp., kann mir das irgendwie nicht vorstellen

        Kommentar


        • #5
          auch ein bsp., kann mir das irgendwie nicht vorstellen
          @Max
          Ich denke er meint, dass ihm Suchtreffer auch innerhalb von html Tags gefunden wird und diese damit unbrauchbar macht.
          z.B. suche nach 're' und markiere den Treffer mit einem gelben Span. Das wird ihm dann etwas wie
          Code:
          <a h<span style="color:yellow;">re</span>f="http://example.com">irgendeintext</a>
          geben und diese Links sind dann unbrauchbar.
          Es geht nur mittels Regexp, dem Modifikator e und look behinds/aheads

          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


          • #6
            String vor dem Ersetzen:

            <p> <li>Test bla bla bla</li> </p>

            <a href="test.php">Test</a> <- Ist bereits ein Link

            <p> Und noch ein Test</p>


            Nach dem Ersetzen (Test wird als Wort gewählt, dass mit einem Link belegt werden soll):

            <p> <li>[COLOR=red]<a href="datei.php">Test</a>[/COLOR] bla bla bla</li> </p>

            [COLOR=blue]<a href="test.php">Test</a>[/COLOR]

            <p> Und noch ein [COLOR=red]<a href="datei.php">Test</a>[/COLOR] </p>


            [COLOR=blue]bleibt vollkommen unverändert da bereits ein anderer Link vorhanden ist[/COLOR]

            [COLOR=red]wird verändert[/COLOR]

            Ich mache es warscheinlich schwerer, als es ist.
            Zuletzt geändert von Voter; 17.10.2006, 03:04.

            Kommentar


            • #7
              @jahlives hast du es jetzt begriffen? - ich nicht.

              @Voter soll nur der erste linktext "Test" nicht ersetzt werden, weil der zweite ist ja nicht rot.

              Kommentar


              • #8
                Schau mal hier oder benutze die SuMa deiner Wahl.

                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
                  @Max
                  Nö ned wirklich...

                  @topicstarter
                  Was ich mir einzig vorstellen kann, ist dass alles markiert wird, was nicht innerhalb von < und > steht. Den ersten Treffer der nicht dazwischen steht aber nicht zu markieren, wüsste nicht wie...

                  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


                  • #10
                    Original geschrieben von jahlives
                    Es geht nur mittels Regexp, dem Modifikator e und look behinds/aheads
                    achso, dann war sein letztes posting aber nicht richtig.
                    preg_replace() [ohne e] reicht dazu auch, weil links können ja nicht verschachtelt sein.

                    Kommentar


                    • #11
                      Ich drücke mich mal genauer aus. Ich möchte einfach Wörter (nach meiner Wahl), mit einem Link belegen, die sich außerhalb von HTML Tags (p,li,ol Tags ausgeschlossen) befinden. Mein Beispiel oben sollte einfach belegen, dass ein "Wort" das bereits verlinkt ist, nicht erneut verlinkt werden soll.

                      Aber dies wird ja schon durch meine oben genannte Bedingung ausgeschlossen, denn wenn ein Wort verlink ist, befindet sich dieses in einem A-Tag (<a>Wort</a>).

                      Scheint wohl doch schwerer zu sein
                      Zuletzt geändert von Voter; 17.10.2006, 02:57.

                      Kommentar


                      • #12
                        Ich habe mein Beispiel mal geändert, ist es jetzt verständlich?

                        Danke für die Geduld

                        Kommentar


                        • #13
                          Für die Suchfkt meiner Seite habe ich das damals so gemacht:
                          PHP-Code:
                          $str preg_replace("/((<[^>]*)|\\b".$suche."\\b/ie",'"\\\\2"=="\\\\1" : "<span style=\"background-color:yellow\">\\\\0</span>"',$deinString); 
                          So sollte der Suchstring nur gematched werden, wenn er nicht innerhalb von < und > vorkommt...
                          Das musst du dann eben an deine Bedürfnisse anpassen.
                          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


                          • #14
                            oder auch soetwas:

                            $var=preg_quote($var, '|');

                            preg_replace('|[^<]\.*('.$var.')\.*[^>]|sU', '<a href="\1">\1</a>', $string);

                            Kommentar

                            Lädt...
                            X