Regular Expression help

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

  • Regular Expression help

    Hallo zusammen, diese RegEx dinger treiben mich immer an den Rand des Wahnsinns. Also hier mein Problem

    Ich benutze für die Commentare auf meiner Seite bb-Code wie z.b. (leerzeichen eigefügt um den bbCode hier nicht zu aktivieren)
    Code:
    [ url]http://test.de[ /url]
    und
    Code:
    [ url=http://www.test.de]test[ /url]
    jetzt zu meinem problem
    ich möchte url erkennen die länger als 40 zeichen sind (da sie mir sonst das Layout zerschießen
    Der Plan ist diese dann durch
    Code:
    [ url=http://www.laaaaaange-url.de]Klick mich, ich bin ein Link[ /url]
    zu ersetzen

    der haken ist aber das ich urls die schon so formatiert sind
    nicht erneut ummodeln möchte.
    also
    Code:
    [ url=http://www.test.de]test[ /url]
    soll nicht geändert werden

    evt könnt ihr mir ja helfen

  • #2
    evtl. findest du aber auch den passenden codeschnipsel hier im forum. Der läuft hier nämlich irgendwo rum.

    Ansonsten hast du auch die Möglichkeit in den Quelltext von nem bel. Forum zu gucken. Urheberrecht beachten.

    Kommentar


    • #3
      hmm,

      nimm doch einfach deinen jetzigen regexp, verwende modifier e oder eine callback-funktion, um die länge zu prüfen ... ansonsten modifizierst du deinen jetzigen dahingehend, daß zwischen den tags mindestens 40 zeichen sind ... {40,} ... http://regexp-evaluator.de/tutorial-...weifteklammern

      oder nicht?
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        Das erkennen der 40 zeichen langen url ist nicht das Problem,

        das Problem ist das das ich so auch die schon modifizierten URLs umbaue:

        aus

        Code:
        [ url=http:laaaaaaange-url]Kuzer text[ /url]
        wird dann

        Code:
        [ url=[ url=http:laaaaaange-url]kurzer text[ /url]][ /ulr]
        ich muß irgendwie die ausschließen die ein "=http" enthalten und das bekomm ich nicht hin

        Kommentar


        • #5
          Falsch! DU musst nur die ansschließen, die als Attribut im öffnenden URL-Tag drin sind. Das sollte nicht das Problem sein. Lies auch unser Tutorial zu diesem Thema.

          Kommentar


          • #6
            irgendwie ist das schon das Problem und euer Tutorial hab ich bereits gelesen.

            PHP-Code:
            $string1 "das [ url]http://www.google.com/search
            ?q=re&hs=gyz&lr=&client[ /url] das ist ein test [ url]http://www.test.de[ /url]"
            ;
            $string2 "das [ url=http://www.google.com/searc
            h?q=re&hs=gyz&lr=&client]test[ /url] das ist ein test [ url=http://www.test.de]test[/url] das "
            ;
            $string3 "das [ url]http://www.google.com/search
            ?q=re&hs=gyz&lr=&client[ /url] das ist ein test [ url]http://www.test.de[ /url] das "
            ;

            $regex "[:alpha:]]+://[^<>[:space:]]+([[:alnum:]/\.\-\+?&%=:]){40,}";
            $replace "[ url=\\0]Klick Mich ich bin ein Link[ /url]";

            $string1_rep ereg_replace($regex$replace$string1);
            echo 
            "$string1_rep<br><br>";
            $string2_rep ereg_replace($regex$replace$string2);
            echo 
            "$string2_rep<br><br>";
            $string3_rep ereg_replace($regex$replace$string3);
            echo 
            "$string3_rep<br><br>"
            und meine gewünschtes ergebis wäre dann
            Code:
            das [ url=http://www.google.com/ search?q=re&hs=gy
            &lr=&client]klick Mich ich bin ein Link[ /url] das ist ein test [ url]http://www.test.de[ /url]";
            
            das [ url=http://www.g oogle.com/search?q=re
            &hs=gyz&lr=&client]test[ /url] das ist ein test [ url=http://www.test.de]test[ /url] das ";
            
            das [ url=http://www.google. com/search?q=re&hs=
            gyz&lr=&client]Klick Mich ich bin ein Link[ /url] das ist ein test [ url]http://www.test.de[ /url] das
            achtung wieder spaces eingebaut damit das mit der anzeige klappt

            ach ja und so holfreich das auch ist, spart euch bitte euer RTFM gequatsche, ich hab schon so ein paar HOWTOs durch und auch meine übrigen regex laufen ganz gut nur das Problem bekomme ich nicht in den Griff
            Zuletzt geändert von the_spas; 19.08.2005, 12:35.

            Kommentar


            • #7
              spart euch bitte euer RTFM gequatsche,
              wow, du trittst ja nett auf,

              schau mal im manual, dort steht auch, warum ereg_ nicht das wahre ist.

              dein regexp-getue sieht recht konfus aus ... du machst dort etwas ganz anderes, als du beschrieben hast.

              verwende einfach preg_replace mit e oder callback und schau dann, ob der string länger als 40 zeichen ist. fertig.

              oder schau dir im manual die assertions an. huh, manual ...
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                au weia

                der regex den ich benutze ersetzt urls die länger als 40 zeichen sind mit dem bb-Code so wie er es soll

                kopier den code dann wirst du es sehen
                das problem ist nur das er die schon bb-code formatierten urls zerballert

                und sorry wenn mich irgendwelche tutorials weiter gebracht hätten würde ich hier nicht fragen ob jemand was produktives dazu beisteuern kann außer einen ach so hilfreichen RTFM kommentar

                wenn das doch so easy ist, dann poste mir doch bitte den pregex dazu

                Kommentar


                • #9
                  klar, der hund ist vermutlich dein persönlicher programmiersklave... brich mal code um, das nervt!

                  Kommentar


                  • #10
                    Alter ich will ja nicht das er mir nen RegExgenerator mit Spracherkennung proggt.

                    Nur wenn er schon duchblicken läßt das er die Peilung hat könnte er ja den RegEx hinschreiben.

                    Wie gesagt RTFM posten kann jeder! Und wirklich hilfreich ist es nicht

                    Kommentar


                    • #11
                      OffTopic:
                      Wenn man den Rat befolgt!

                      Kommentar


                      • #12
                        deinen beispiel-code verstehe ich nicht. wieso führst du die umwandlung zu langer urls nicht erst bei der umwandlung des bbcodes durch?

                        selbst wenn du das nicht möchtest, such doch einfach nach mindestens 40 zeichen langem text, der zwischen den url-tags steht ... sollte dabei im öffnenden url-tag schon eine adresse stehen, kürzt du nur den text, sonst kürzt du die url und schreibst die vollständige in den öffnenden tag.

                        je länger ich über dein problem nachdenke, desto schwieriger fällt es mir, zu erkennen, was du machen möchtest ...

                        daß dein geposteter regexp fehlerhaft ist, kann ich mir vorstellen, er sucht ja auch nach etwas völlig falschem ...

                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          das problem ist das ich eine mischform von text habe zum einen enthällt der text bb-code urls und zum anderen aber auch normale

                          nichts destotrotz hab ich das problem gelößt
                          es war nur ein kleiner zusatz zu meinem regex nötig
                          also kann er nicht so falsch gewesen sein

                          trotzdem danke

                          hab mal in den code eines gewissen forums geschaut

                          die machen das da ähnlich
                          der einzige unterschied ist das die davon ausgehen das sich beim bb-code parsen nur noch bbcode urls im code befinden da sie die normalen urls schon beim eintragen eines postings in bb-code urls umwandeln und der regex den die da verwenden war ne nette hilfe :0)

                          Kommentar

                          Lädt...
                          X