Regulärer Ausdruck - Link in Textarea ersetzen

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

  • Regulärer Ausdruck - Link in Textarea ersetzen

    Hallo Forum,

    ein User soll im Textarea mehrere Links einfügen können.

    Ich habe mir das so vorgestellt:

    Der User gibt ein:

    Blablabla....
    {www.abc.de}{Dies ist ein Link!}
    ...laber...

    Und das soll dann später bei der Ausgabe ( in der Quelle) natürlich so aussehen: <a href="www.abc.de">Dies ist ein Link</a>

    Also erstes Vorkommen Inhalt {} steht im href und zweites {} innerhalb des Tags. Natürlich kann das auch mehrmals vorkommen...

    Wie kann ich das am besten lösen?
    Ist es in der Form überhaupt sinnvoll oder geht es einfacher?

    Danke schonmal für Tipps,

    Grüße,
    Pust

  • #2
    Hallo, ich würde statt }{ ein Gleichheitszeichen bevorzugen. Aber so geht es auch.
    Das ganze löst du, indem du diese Zeichenfolge mithilfe eines RegEx beschreibst. Wie? Das sagt Google eigentlich ziemlich deutlich.
    Soll heißen, du fängst an, einen Regulären Ausdruck dafür zu entwickeln und wir helfen dir weiter, wenn du Probleme dabei hast.

    Kommentar


    • #3
      PHP-Code:
      preg_replace('/\\{(.*)\\}\\{(.*)\\}/isU','<a href="\\1">\\2</a>',$string); 
      http://regexp-evaluator.de/evaluator...f975/#ergebnis
      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


      • #4
        Nagut, wo wir schon dabei sind, die Lösungen zu verraten, erweitere ich den RegEx noch ein wenig:

        PHP-Code:
        $text preg_replace('#\\{((.*)\\}(\\s*)\\{(.*)\\}#Uis''<a href="$1">$3</a>'$string); 
        Hm... vBulletin v2 ist ja auch nicht so das Ultimative... Verschluckt alle einfachen Backslashes...

        Kommentar


        • #5
          Puh, vielen Dank schonmal!
          Werd ich gleich mit experimentieren, wenn nicht wieder irgendwelche komischen Anrufe dazwischen kommen!

          Noch eine Frage, funktioniert das auch, wenn mehrere Links vorkommen?

          Kommentar


          • #6
            Ja klar.

            Kommentar


            • #7
              Yeah, wow, so einfach ist das!
              Reguläre Ausdrücke sind was geiles (wenn man sie versteht und da hapert es noch ein wenig bei mir...)

              Ich hab jetzt also ein Textarea, da kann man das Eintragen,
              dann kommen die POSTs, dann

              $text = $_POST['text'];

              $text = preg_replace('/\{(.*)\}\{(.*)\}/isU','<a href="\1">\2</a>',$text);

              und dann kommt das in eine Datenbank.

              Danke nochmal!

              Kommentar


              • #8
                Noch eine Frage, funktioniert das auch, wenn mehrere Links vorkommen?
                Um dir genau das zu zeigen habe ich einen Link gepostet
                @Manko
                Wieso \s* klammern? Brauchst du im Resultat nicht. Und mit dieser Klammerung klappt etwas eh nicht. Zumindest eine schliessende ) fehlt oder eine öffnende ( ist überflüssig

                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
                  Original geschrieben von jahlives
                  Um dir genau das zu zeigen habe ich einen Link gepostet
                  @Manko
                  Wieso \s* klammern? Brauchst du im Resultat nicht. Und mit dieser Klammerung klappt etwas eh nicht. Zumindest eine schliessende ) fehlt oder eine öffnende ( ist überflüssig

                  Gruss

                  tobi

                  Hm, stimmt doch?? Funktioniert ja auch, hab es direkt aus meinem Quelltext kopiert...


                  Ja, den Link hab ich mir jetzt angeschaut, nicht übel, kann man auch schön experimentieren!

                  EDIT:
                  Ach so, Du meintest den Post von Manko, sorry, nicht richtig gelesen!

                  Kommentar


                  • #10
                    Ja, ich weiß... Die Klammerung wird im Resultat nicht benötigt. Aber mit der Zeit häufen sich die Fälle, wo man es dann doch irgendwie braucht, weshalb ich mir dann angewöhnt habe, zu klammern (nicht alles, versteht sich). Aber ja, kann man weglassen, aber das \s* würde ich lassen. Man kann von Usern nicht erwarten, dass sie garantiert keine Leerzeichen verwenden.
                    Man könnte auch zwischen \{ und (.*) noch ein \s* setzen (analog zwischen (.*) und \}).

                    Und was die fehlgesetzte Klammer angeht: ups, C&P ist wirklich böse, besonders, wenn man daran noch rumarbeitet.

                    Also hier das korrekte Listing:
                    PHP-Code:
                    $text preg_replace('#\\{\\s*(.*)\\s*\\}\\s*\\{\\s*(.*)\\s*\\}#Uis''<a href="$1">$2</a>'$string); 
                    Zuletzt geändert von Manko10; 19.03.2008, 16:52.

                    Kommentar


                    • #11
                      Das ist ein stichhaltiges Argument. Ich werde das mit dem "s" mit reinnehmen. Man muß ja immer so idiotensicher wie möglich programmieren...

                      Kommentar

                      Lädt...
                      X