Aquariophile: [URL] [/URL] in UBB-Foren.... Wie macht man das? (Hat Zeit!)

Hallo !

Ich habe eine Frage.... und bitte euch ganz lieb um Antwort.....

Zuerst selber probiert, hatte aber keine Vorstellung wie ich es verwirklichen soll

und desshalb poste ich.

Also:

Ohne viel Erklärung gleich die Fakten:

Bei einem Eingabefeld

$bla =~ s/[table]/<table border="2"><tr><td>/g;

$bla =~ s/[/table]/</td></tr></table>/g;

Somit würde Folgendes:

[table] Hallo !! [/table]

Folgendes ergeben:

<table border="2"><tr><td> Hallo !! </td></tr></table>

Also weiter:

Ich will machen, dass man mit

[URL]  [/URL]   einen Link einfügen kann.

Nun entsteht das Problem.

anfangen kann ich ja dass ich [URL]  mit <a href="    ersetze,

und [/URL]  mit ">  aber genau jetzt wirds schwierig....

Weil nämlich noch kein sichtbarer Link-Text da steht den der User dann sieht,

sondern erst der Link an sich.

Wie soll ich das, was ich mein,

am Besten verwirklichen?

Ich hätte an folgendes gedacht:

[URL] http://www.teamone.de/selfhtml^HTML-Seiten selbst erstellen[/URL]

Das mach praktisch in den URL bei der eingabe mit ^ gestrennt auch schon den Linktext einbringt,

das wäre dann also bei obigen beispiel:

<a href="http://www.teamone.de/selfhtml>HTML-Seiten selbst erstellen</a>

Alles schön und gut,

aber wie ich DAS nun verwirkliche ... Weiß ich ehrlich nicht....

Bis zu der Table-Sache wars ja noch einfach,

aber _das_  ....

Bitte euch mir ein Antwortposting zu schreiben.

Hat aber Zeit......

Dankeschöööön   ;o)

Aquariophile

  1. Hi,

    Du kannst ja das ^ auch einfach ersetzen
    wenn du also [URL]http://....^Text, der erscheinen soll [/URL] schreibst, dann ersetzt du einfach
    [URL] mit <a href"
    danach kommt die Adresse,
    ^ ersetzt du mit ">
    jetzt kommt der Text und am Schluss </a> statt [/URL]

    Grüße,
    Stephan

    1. Hallo Stephan

      Soweit kam ich auch schon,

      aber ich kann ja nicht _jedes_ ^ im Text  ">  ersetzen,

      muss schon irgendwie differenzieren dass ^ nur dann mit "> ersetzt wird,

      wenn es tatsächlich innerhalb der zusammenstellung [URL] [/URL] vorkommt.

      Und jeweils das erste, eweil wenn einer mehrmals in ^ reinmacht ist ein Problem.

      Wie gesagt,

      ich steh an einer Mauer an....

      1. Hallo Stephan

        Soweit kam ich auch schon,

        aber ich kann ja nicht _jedes_ ^ im Text  ">  ersetzen,

        muss schon irgendwie differenzieren dass ^ nur dann mit "> ersetzt wird,

        wenn es tatsächlich innerhalb der zusammenstellung [URL] [/URL] vorkommt.

        Und jeweils das erste, eweil wenn einer mehrmals in ^ reinmacht ist ein Problem.

        Hi,
        Dann würde ich überhaupt auf das ^ verzichten und einen neuen tag einführen, z.B. [Link]
        dann kann man schreiben: [URL] http://... [Link] Text [/URL]

        [Link] ersetzt du dann eben mit ">
        Das keiner das [Link] falsch verwendet, müsstest du voraussetzen, aber das musst du ja schließlich auch bei allen anderen tags.

        Grüße,
        Stephan

        1. Hallo Stephan

          Du, damit kann ich mich anfreunden.......

          Eine Frage noch:
          Wie mache ich, dass sich der Eingabewert wiederholt ?
          Das heißt das, was zwischen [URL] und [/URL] steht,
          wiederholt sich doppelt in href und in dem linktext

          Beispiel:
          [URL]http://www.teamone.de[/URL]

          ergäbe z.B.
          <a href="http://www.teamone.de">http://www.teamone.de</a>

          Nachdem ich zwar die [URL] bzw. [/URL] werte ersetzen kann,
          aber nicht das was dazwischen steht doppelt anwenden kann,
          ist das auch so ne Sache....

          Aber die UBB Foren können das irgendwie.

          Auf jeden Fall,
          Vielen Dank für Deine Hilfe

          Liebe Grüße,
          Aquariophile

          1. Hi,

            if (not /[Link]/) {
                s#[URL](.+)[/URL]#<a href"$1">$1</a>#g;
                }

            habs nicht ausprobiert, sollte aber funktionieren...

            Alle Adressen mit [URL]...[/URL], zwischen denen kein [Link] vorkommt, werden damit in einen Link verpackt. Alle anderen Adressen kannst du ja dann wie üblich ersetzen.
            Wenn du einen Teil eines regulären Ausdrucks noch einmal verwenden willst, musst du ihn ihn Klammern setzen, dann kannst du ihn später durch $1, $2,... ansprechen.

            Siehe auch ->perldoc perlre

            Grüße,
            Stephan

            1. Hi,

              if (not /[Link]/) {
                  s#[URL](.+)[/URL]#<a href"$1">$1</a>#g;
                  }

              $_ = '[URL]bla[/URL] bla [URL]bla[/URL]

              habs nicht ausprobiert, sollte aber funktionieren...

              Nein, s.o.

              Gruss,
               Christian
               http://wwwtech.de

              1. $_ = '[URL]bla[/URL] bla [URL]bla[/URL]

                Stimmt, mein Fehler. Mehr als einen Link pro Zeile hab ich da gar nicht bedacht.

                Grüße,
                Stephan

                1. Hallo

                  $_ = '[URL]bla[/URL] bla [URL]bla[/URL]

                  Stimmt, mein Fehler. Mehr als einen Link pro Zeile hab ich da gar nicht bedacht.

                  Dann solltest du die richtige Lösung auch gleich posten:

                  s#[URL](.+)[/URL]#<a href"$1">$1</a>#g

                  Du solltest in diesem Fall den + 'faul' einstellen (mit einem ?), also

                  s#[URL](.+?)[/URL]#<a href"$1">$1</a>#g

                  Tschö Matti

      2. Hi,

        wenn es tatsächlich innerhalb der zusammenstellung [URL] [/URL] vorkommt.

        $txt =~ s![URL]([^^]+)(.*?)[/URL]!<a href="$1">$2</a>!g;

        ich steh an einer Mauer an....

        Wie waere es, wenn du anfaengst zu lesen?

        Gruss,
         Christian
         http://wwwtech.de

        1. Hallo Christian

          Vielen Dank für Deine Zeile regexps

          Wo kann ich reguläre Ausdrücke in solch komplexer Form lernen?
          Ich kann sie zwar _sehr_ begrenzt aus SELFhtml,
          aber derartiges bekomm ich unmöglich hin.

          Bitte nenne mir ein Tutorial,
          falls vorhanden Deutsch......

          Danke Dir
          Aquariophile

          1. Hallo

            Wo kann ich reguläre Ausdrücke in solch komplexer Form lernen?
            Ich kann sie zwar _sehr_ begrenzt aus SELFhtml,
            aber derartiges bekomm ich unmöglich hin.

            Ich kann Reguläre Ausdrücke auch nur sehr begrenzt.

            Ich gehe immer so an die Erstellung ran:

            Ich schreib mir einen Text, den dieser RegExp durchlaufen soll

            (In deinem Fall also bspw.:
            blablabla [URL]http://www.bla.bla^seht her, das ist blah[/URL] blabla )

            Dann fang ich mit dem Regexp an, und zwar erstmal das Grundgerüst

            s/[URL](.*)[/URL]/<a href="$1">$1</a>/

            ( Das mit dem zugreifen auf die gespeicherten Werte ist wichtig und solltest du dir merken !)

            Jetzt geh ich an das nächste ran (natürlich erstmal getestet), das wäre der Linktext:

            s/[URL](.*)^(.*)[/URL]/<a href="$1">$2</a>/

            Beim Testen finde ich dann früher oder später Probleme, in diesem Fall wenn ich mehrere Links in meinem Text drinhab, dann wird $1 nämlich Linktext1 + url2, weil der Asterisk gierig ist, dh. möglichst viel 'schlucken' will.
            Also muss ich ihn auf faul einstellen (? hintendran).

            s/[URL](.*?)^(.*?)[/URL]/<a href="$1">$2</a>/

            Nächster Punkt: ich überlege mir die Modifier.
            In deinem Fall also g, weil es sein kann, dass mehrere Links in einer Zeile (oder in einem Posting) stehen.
            Auch fällt mir ein, dass ich statt * auch + nehmen kann, da die Url und der Linktext ja mindestens ein Zeichen lang sein sollten.

            Ich komme jetzt auf folgende Lösung:

            s/[URL](.+?)^(.+?)[/URL]/<a href="$1">$2</a>/g

            Und bei jedem Schritt teste ich, weil ich mein Wissen nicht auf die Probe stellen will und auf unagenehme Nebeneffekte prüfe.

            Tschö Matti

            1. Hi,

              Wo kann ich reguläre Ausdrücke in solch komplexer Form lernen?
              Ich kann sie zwar _sehr_ begrenzt aus SELFhtml,
              aber derartiges bekomm ich unmöglich hin.

              Ich kann Reguläre Ausdrücke auch nur sehr begrenzt.

              Ich gehe immer so an die Erstellung ran:

              Ich schreib mir einen Text, den dieser RegExp durchlaufen soll

              (In deinem Fall also bspw.:
              blablabla [URL]http://www.bla.bla^seht her, das ist blah[/URL] blabla )

              Dann fang ich mit dem Regexp an, und zwar erstmal das Grundgerüst

              s/[URL](.*)[/URL]/<a href="$1">$1</a>/

              ( Das mit dem zugreifen auf die gespeicherten Werte ist wichtig und solltest du dir merken !)

              Jetzt geh ich an das nächste ran (natürlich erstmal getestet), das wäre der Linktext:

              s/[URL](.*)^(.*)[/URL]/<a href="$1">$2</a>/

              Beim Testen finde ich dann früher oder später Probleme, in diesem Fall wenn ich mehrere Links in meinem Text drinhab, dann wird $1 nämlich Linktext1 + url2, weil der Asterisk gierig ist, dh. möglichst viel 'schlucken' will.
              Also muss ich ihn auf faul einstellen (? hintendran).

              s/[URL](.*?)^(.*?)[/URL]/<a href="$1">$2</a>/

              Nächster Punkt: ich überlege mir die Modifier.
              In deinem Fall also g, weil es sein kann, dass mehrere Links in einer Zeile (oder in einem Posting) stehen.
              Auch fällt mir ein, dass ich statt * auch + nehmen kann, da die Url und der Linktext ja mindestens ein Zeichen lang sein sollten.

              Ich komme jetzt auf folgende Lösung:

              s/[URL](.+?)^(.+?)[/URL]/<a href="$1">$2</a>/g

              Und bei jedem Schritt teste ich, weil ich mein Wissen nicht auf
              die Probe stellen will und auf unagenehme Nebeneffekte prüfe.

              Hast du aber ganz offensichtlich nicht.

              entweder:
              s/[URL](.+?)^(.+?)[/URL]/<a href="$1">$2</a>/g
              oder:
              s![URL](.+?)^(.+?)[/URL]!<a href="$1">$2</a>!g

              verbessert (was ich vorher schon gepostet hatte):
              s![URL]([^^]+)^(.+?)[/URL]!<a href="$1">$2</a>!g

              greedy ausdruecke sind einfach schneller als non greedy ausdruecke...

              Gruss,
               Christian
               http://wwwtech.de

              P.S.: Denken before posten rulz...

  2. s#[URL](.*?)[/URL]#<a href="$1">$1</a>#g

    muesste gehen, ist aber ungetestet.

    Peter