Ankündigung

Einklappen
Keine Ankündigung bisher.

Reguläre Ausdrücke 2)

Einklappen

Neue Werbung 2019

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

  • Reguläre Ausdrücke 2)

    Schon wieder hänge ich mit den Regulären Ausdrücken!

    BEi einer Suchfunktion soll anschließend das Suchwort mit "umgebenden" Text ausgegeben werden. Ich dachte preg_replace() zu verwenden.

    Gesucht werden soll ein string der mit <p beginnt dann folgen Zeichen oder auch nicht (.*), dann das Suchwort $such, dann wieder Zeichen oder auch nicht (.*) und schließlich ein </p>

    Ich weiß was ich will, durchschaue aber die Syntax von den Dingern nicht.
    Hat jemand einen Tipp?

    Thanx

  • #2
    preg_replace ist dafür aber ganz schlecht geeignet, da es ersetzt(replace)

    preg_match o.ä. funktioniert da viel besser.

    #php/QuakeNet Tutorial - Reguläre Ausdrücke , erklärung zu der syntax der reg. ausdrücke
    PHP: preg_match - Manual , erklärung zu rpreg_match syntax

    ansonsten hilft ausprobieren. (dann solltest du hier aber das lesen meines postes einstellen )


    PHP-Code:
        $suche ="abcd";
        
    $string"<p>versuch1 abcdefg</p>";
        
    $treffer = array();
        
    preg_match('=<p>.*'.$suche.'.*</p>='$string$treffer);
        
    var_dump($treffer); 
    Karteikasten
    "Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions

    Kommentar


    • #3
      preg_match

      das mit preg_match ist ein guter hinweis.
      Am Ausdruck selber muss ich noch basteln, da er im Augenblick auch weitere stringteile mit nimmt, die von <p></p> umgeben sind auch wenn das Suchwort nicht drin steht.
      Aber vielen Dank schon mal

      Kommentar


      • #4
        preg_replace finde ich dafür gut geeignet
        PHP-Code:
        $text 'abcabcdefghabcdh<p>abcdefg</p>cde<p>cde</p>abcde';
        $suchwort='cde';
        $pattern '#(<p.*)(' preg_quote($suchwort'#') . ')(.*</p>)#Ui';
        echo 
        preg_replace($pattern'$1[strong]$2[/strong]$3'$text); 

        Kommentar


        • #5
          Hab das jetzt in zwei Schritten gelöst.
          Erstmal mit preg_match() aus dem gesamten Text den Absatz raussuchen, in dem das Suchwort sich befindet

          Code:
          preg_match('=<p.*?'.$such.'.*?</p>=', $inhalt, $treffer);
          Dann mit preg_replace() das Suchwort in dem Absatz hervorheben.

          Es ist eine Viecherei mit den regulären Ausdrücken, aber wenn denn mal läuft ist es ne feine Sache.
          Der Schubs in die richtige Richtung ist für mich da sehr hilfreich.
          Danke nochmal an alle.

          Kommentar


          • #6
            Das funktioniert auch in einem Schritt oder habe ich etwas übersehen?

            Kommentar


            • #7
              in einem Schritt

              Bei mir donnert diese Variante den gesamten Artikel rein...

              Kommentar


              • #8
                Testdaten bitte. Denn mit
                PHP-Code:
                $text 'abcabcdefghabcdh<p>abcdefg</p>cde<p>cde</p>abcde';
                $suchwort='cde';
                $pattern '#(<p.*)(' preg_quote($suchwort'#') . ')(.*</p>)#Ui';
                echo 
                preg_replace($pattern'$1[strong]$2[/strong]$3'$text); 
                erhalte ich das erwartete Ergebnis
                abcabcdefghabcdh<p>ab[strong]cde[/strong]fg</p>cde<p>[strong]cde[/strong]</p>abcde

                Kommentar


                • #9
                  Datenbank

                  Hm, OK, seh ich auch, aber wenn ich das auf den Datenbank-Text anwende gehts nicht

                  Kommentar

                  Lädt...
                  X