RegEx: suchwort nur finden, wenn nicht innerhalb eckiger klammern

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

  • RegEx: suchwort nur finden, wenn nicht innerhalb eckiger klammern

    versuche mich grade an einer funktionalität, um suchbegriffe in texten zu highlighten.

    zusätzliche anforderung: im text kann es links mit der bekannten BB-Code-syntax [ukl=linkadresse]linktext[/url] geben - innerhalb von linkadresse darf natürlich kein highlighting stattfinden.
    (hab mal [ukl=...] statt url verwendet, damit das forum nicht ersetzt.)

    beispieltext:
    meine blog-einträge sind online zum beispiel unter [ukl=/blog/5]eintrag #5[/url] oder [ukl=/blog/17]eintrag #17[/url] aufrufbar.

    suchwort sei mal "blog".

    dann sollte natürlich
    meine [h]blog[/h]-einträge sind online zum beispiel unter [ukl=/blog/5]eintrag #5[/url] oder [ukl=/blog/17]eintrag #17[/url] aufrufbar.
    dabei rauskommen, [h] ... [/h] jetzt mal als code für's highlighting.


    ich hab diverese suchmuster durchprobiert, aber ich bekomme es nicht hin, dass "blog" nur dann gehighlighted wird, wenn es nicht irgendwo innerhalb von eckigen klammern steht.

    Code:
    /([^\[].*?)(blog)(.*?[^\]])/
    ist natürlich auch irgendwie logisch, dass das auch auf [ukl=/blog/5] matcht ... weil ich ja noch .*? mit drin stehen habe.

    hab schon diverse modifikationen dieses musters durchprobiert, aber irgendwie bin ich immer noch auf dem falschen weg.


    also, jemand eine idee, wie ich es hinbekomme, dass das suchwort nur gefunden wird, wenn es nicht irgendwo innerhalb von [ ... ] steht?
    I don't believe in rebirth. Actually, I never did in my whole lives.

  • #2
    spontan würd' ich erst "blog" highlighten und im nachsatz eine 2. regex laufen lassen, die den highlight-code aus bereichen, die direkt von [] umschlossen sind, wieder rausschmeisst.
    Kissolino.com

    Kommentar


    • #3
      ja, das hab ich mir auch erst überlegt - aber finde ich doch extrem "unsauber" ...

      da muss es doch auch 'ne direkte möglichkeit geben, das gwünschte zu erreichen?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        evt helfen Dir assertions weiter...
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Original geschrieben von MelloPie
          evt helfen Dir assertions weiter...
          hab ich mich noch nicht mit beschäftigt, schaue grad im manual an, was assertions sind.

          hm, sehe aber auf anhieb nicht, wie ich die bei meinem problem anwende. na ja, muss ich mir wohl mal etwas genauer und in ruhe anschauen ...
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            hab assertions immer umgangen :-) aber fragen im Forum sind immer gut sich in was reinzulesen:
            hab was probiert sollte deinem Problem nahe kommen:

            $a = "[ukl]hallo[/url] hallo';
            $s ='hallo';
            echo preg_replace('/(?<!\[url\])$s(?<!\[url])/i', "<b>$s</b>", $a);

            Zuletzt geändert von MelloPie; 27.08.2004, 19:18.
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Original geschrieben von MelloPie
              hab was probiert sollte deinem Problem nahe kommen:

              $a = "[ukl]hallo[/url] hallo';
              $s ='hallo';
              echo preg_replace('/(?<!\[url\])$s(?<!\[url])/i', "<b>$s</b>", $a);
              danke für die mühe, aber hilft mir nicht so wirklich weiter.

              neben [url] gibt es noch weitere tags, in denen ebenfalls nicht ersetzt werden darf - also wollte ich den "tagnamen" wenn möglich ganz aus meinem suchmuster raus lassen, und mich nur auf [...blog...] beschränken.


              hab jetzt mal
              /(?<=\[)([^\[]*)(blog)/
              probiert - mit dem wunderbaren ergebnis, dass er mir damit nur das wort blog innerhalb von tags highlighted, außerhalb aber unberührt lässt :-/

              OK, ist logisch, weil (?<= eine positive assertion ist - aber wenn ich dann (?<! draus mache, frisst er wieder alles wo "blog" steht ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Code:
                #(blog)(?!([^\[]*\]))#isU
                scheint zumindest zu funktionieren, obwohl ich mir auch nicht mehr sicher bin, was ich da gebastelt hab

                http://pcre.nophia.de/evaluate/index...4d57beda8db4b0
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  Original geschrieben von derHund
                  scheint zumindest zu funktionieren,
                  jepp, sieht nach erstem test sehr gut aus, danke schon mal.
                  obwohl ich mir auch nicht mehr sicher bin, was ich da gebastelt hab
                  muss ich mir dann auch bei tageslicht noch mal in ruhe anschauen, was das bedeutet und warum es "funktioniert" :-)
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Ups falsches Topic.
                    Zuletzt geändert von Smiller; 22.09.2004, 16:05.

                    Kommentar

                    Lädt...
                    X