phpbar.de logo

Mailinglisten-Archive

[php] preg_replace nicht zwischen bestimmten Zeichen

[php] preg_replace nicht zwischen bestimmten Zeichen

Andreas Lange php_(at)_phpcenter.de
Fri, 18 Oct 2002 10:55:53 +0200


> 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