Reguläre Ausdrücke mit mehreren Vorkommnissen

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

  • Reguläre Ausdrücke mit mehreren Vorkommnissen

    Hallo

    Ich habe ein kleines Problem mit den Regulären Ausdrücken.
    Mein Code:
    Code:
    $string = 'Dies ist ein Test weitere infos finden sie auf [link:[url]www.test.ch[/url]] und [link:[url]www.test.li,hier[/url]].';
    
    $pattern = '/\[link:(.*?)\,(.*?)\]/i';
    
    $replace = '<a href="http://\1">\2</a>';
    
    echo preg_replace($pattern, $replace, $string);
    Mein Problem ist nun folgendes, da das gesuchte Muster mehrmals vorkommt.
    Resultat:
    Code:
    <a href="www.test.ch] und [link:[url]www.test.li[/url]">hier</a>
    Ich habe in einem Tutorial gelesen, dass man dagegen vorgehen kann, indem man (.*?) statt (.*) schreibt, aber das resultat bleibt dasselbe.
    Kann mir jemand helfen?

  • #2
    Dein Problem ist, dass
    Code:
    [link:www.test.ch]
    nicht auf dein Suchmuster passt.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      versuch mal so:
      PHP-Code:
          $string 'Dies ist ein Test weitere infos finden sie auf [link:www.test.ch] und [link:www.test.li,hier].';
          
      $pattern '/(\[link:(.*?)\])/i';
          
      $replace '<a href="http://\1">\2</a>';
          echo 
      preg_replace($pattern$replace$string); 
      EDIT:
      Das nächste Mal bitte selbst URL-Umwandlung und Smilies deaktivieren
      Zuletzt geändert von mrhappiness; 21.02.2006, 09:48.

      Kommentar


      • #4
        @mrhappiness
        Ja, soweit kann ich das nachvollziehen. Aber ich möchte ja, dass diese funktion eben dieses tag auslässt, da es kein komma und keinen linktext beinhaltet.
        ich wollte für beide link-typen eigene abfragen machen.

        @patrick_pq
        für den ersten link würde das schon funktionieren (mit der ausnahme das $replace = '<a href="http://\1">\1</a>' heissen müsste), aber es geht mir eigentlich vorallem darum, dass er beide links getrennt verarbeitet. Denn sonst würde er beim zweiten tag die url inklusive komma und linktext nehmen.

        Kommentar


        • #5
          klar würde er dass, weil das ,hier ja auch in der eckigen Klammer steht

          Kommentar


          • #6
            ich will die beiden typen aber getrennt verarbeiten.

            kann man das mit regulären ausdrücken nicht irgendwie hinbekommen?
            quasi ersetze [link:LINK,TEXT] durch <a href...
            und [link:LINK] durch <a href
            wobei beim ersten muster zwingend ein komma zwischen [link: und der nächsten folgenden eckigen klammer benötigt.

            Kommentar


            • #7
              Ersetze das erste (.*?) mal durch ([^\]]+)

              Damit sagst du, dass zwischen link: und dem nächsten Komma alles stehen darf, außer einer schließenden eckigen Klammer
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8


                Toll, es hat geklappt!
                Vielen Dank für die Hilfe @all!

                Kommentar


                • #9
                  sorry, hatte nicht richtig verstanden was du wolltest ...

                  Kommentar

                  Lädt...
                  X