Ankündigung

Einklappen
Keine Ankündigung bisher.

Mal wieder Linkersetzer (preg_replace)

Einklappen

Neue Werbung 2019

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

  • Andreas
    hat ein Thema erstellt Mal wieder Linkersetzer (preg_replace).

    Mal wieder Linkersetzer (preg_replace)

    Ich möchte mir einen Textparser schreiben. Dieser soll einen Text nach Begriffen durchsuchen und diese durch einen Link ersetzen.
    Allerdings soll jemand ohne Kenntnis von regulären Ausdrücken auch in der Lage sein, diese Funktion zu benutzen.

    Ich hab mal ne Weile im Forum gesucht, doch ich habe nur Beiträge gefunden, die bei einer Wortersetzung durch Links nicht berücksichtigt haben, dass da genausogut Groß/Kleinschreibung, Satzzeichen oder ein zusammengesetztes Wort stehen kann.
    PHP-Code:
    <?
    function text_replace($pattern, $replacement,$text) {
        
        // Hier stimmt schon was nicht.
        // Ersetzt werden sollen:
        // "Digital "     => "<link>Digital</link> "
        // " digital "    => " <link>digital</link> "
        // " digital."    => " <link>digital</link>."
        // " digital, "    => " <link>digital</link>, "
        // für ":" etc auch
        // Digitalreceiver soll nicht ersetzt werden.
        $pattern = "/([^\w]?".$pattern."[,!\?\.\:]?[^\w]?)/iU";
        
        // Diese pattern soll nun auf das $replacement angewendet werden,
        // und zwar so, dass alle Vorkommen von "digital" genau wie oben durch "\\1" ersetzt werden.
        // Dadurch muss der REGEX-unerfahrene Nutzer bei der Parameterübergabe nicht "\\1" schreiben.
        // Das beugt auch Fehlern vor.
        // Gewünscht: $replacement == "<link>\\1</link>";
        $replacement = preg_replace($pattern,"#1#",$replacement);
        $replacement = str_replace("#1#","\\\\1",$replacement);    
        
        
        return preg_replace($pattern, $replacement,$text);
    }

    $text = "Digital Fernsehen ist toll. Manche Receiver sind digital. Diese heißen Digitalreceiver. Hier kommt digital in die Satzmitte.";
    $newtext = text_replace("digital",'<link>digital</link>',$text);
    ?>
    Der Text soll nachher so aussehen:
    "<link>Digital</link> Fernsehen ist toll. Manche Receiver sind <link>digital</link>. Diese heißen Digitalreceiver. Hier kommt <link>digital</link> in die Satzmitte."
    Könnte mir da jemand vielleicht nen Tipp oder nen Link geben, wo es etwas in der Form gibt?

  • Gast-Avatar
    Ein Gast antwortete
    Mal wieder Linkersetzer (preg_replace)
    Mal wieder die selben oder ähnliche Fragen

    $newtext = text_replace("digital",'<link>digital</link>',$text);
    Wozu dafür eine extra Fuktion ?
    preg_replace() reicht schon

    Einen Kommentar schreiben:


  • Andreas
    antwortet
    Hab die Lösung:
    Kleiner Umweg über str_replace();
    PHP-Code:
    function text_replace($pattern$replacement,$text) { 
        
    $pattern "~(\b".$pattern."\b)~i";
        
    $replacement preg_replace($pattern,"#1#",$replacement);
        
    $replacement str_replace("#1#","$1",$replacement);
        
        return 
    preg_replace($pattern$replacement,$text); 


    $text "Digital Fernsehen ist toll. Manche Receiver sind digital. Diese heißen Digitalreceiver. Hier kommt digital in die Satzmitte."
    $newtext text_replace("digital",'<link>digital</link>',$text); 

    Einen Kommentar schreiben:

Lädt...
X