Mailinglisten-Archive |
> Hi, Hi > -----------------------------8<---------------------------------------- > $s = "foo"; > $t = "<a href=\"foo.php\">foo</a>foo"; > $r = "bar"; > preg_replace ("/(<\/?)(\w+)([^>]*>)/e", > "'\\1'.strtoupper('\\2').'\\3'", > $t); > echo htmlspecialchars($t)."\n"; > // $s in $t durch $r ersetzen: > preg_replace("/((<[^>]*)|$s)/e", '"\2"=="\1"? "\1":"$r"', $t); > echo $t."\n"; > // $s case-insensitive in $t hervorheben: > preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"<b>\1</b>"', $t); > echo $t."\n"; > ----------------------------------->8---------------------------------- Hab mich mit einem ganz ähnlichen Problem neulich rumgeschlagen und auch eine fast perfekte Lösung gefunden ;-) function replace($string,$words,$replacer) { $words = explode(',',$words); $temp = array(); foreach($words as $word) { $temp[] = preg_quote(trim($word)); } $words = implode('|',$words); $string = '>'.$string.'<'; $string = preg_replace('#((?<=\>)[^\>\<]*?)('.$words.')([^\>\<]*?(?=\<))#i s','\1'.$replacer.'\3',$string); $string = substr($string,1,-1); return $string } $s = "foo"; $t = "<a href=\"foo.php\">foo</a>foo"; $r = "bar"; replace($t,array($s),$r); wenn z.B. $r = '<b>\2</b>'; gemacht wird, dann werden die gefundenen Wörter bold gemacht ;-) > cya later > Stephan Wenn jemand eine elegantere Lösung kennt bitte posten ;-) Gruss Andreas Lange -- Haas Media GmbH | Phone +49(0)511 27038-70 Agentur für moderne Medien | Fax +49(0)511 27038-69 Hindenburgstrasse 38 | Web http://www.haas-media.de/ 30175 Hannover | Mail andreas.lange_(at)_haas-media.de Deutschland/Germany | PGPFP 4204 C703 2D73 58DA F75B C1F2 E524 6949
php::bar PHP Wiki - Listenarchive