php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.12.2005, 11:24  
Erfahrener Benutzer
 
Benutzerbild von Andreas
 
Registriert seit: 22.04.2005
Beiträge: 391
Andreas ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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?
Andreas ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.12.2005, 13:42  
Erfahrener Benutzer
 
Benutzerbild von Andreas
 
Registriert seit: 22.04.2005
Beiträge: 391
Andreas ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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); 
Andreas ist offline   Mit Zitat antworten
Alt 19.12.2005, 16:54  
Gast
 
Beiträge: n/a
Standard

Zitat:
Mal wieder Linkersetzer (preg_replace)
Mal wieder die selben oder ähnliche Fragen

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


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_replace linktext, preg replace links, preg_replace link text, preg_replace links pattern, satzzeichen preg_replace php, preg_replace pattern \\b, php text_replace, preg_replace links

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.