PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchbegriffe hervorheben mit preg_replace()



Xerxes
23-01-2004, 22:46
Hallo,

ich habe ein mittelschweres Problem mit den von mir so geliebten regulären Audrücken.
Ich möchte in den Ergebnissen einer Suche die gesuchten Begriffe hervorheben. Da ich das ganze mit einem <span>-Container tue, möchte ich allerdings nicht, dass auch die URL von einem Link mit hervorgehoben wird.
Bsp:

<!-- vorher -->
<a href="http://www.haloorbit.de">Halo Orbit</a>

<!-- nachher -->
<a href="http://www.haloorbit.de"><span class="blam">Halo</span> Orbit</a>

Ich krieg es einfach nicht hin, dass er die Links (und sämtliche anderen html-tags) ignoriert. Ich hab das php-manual schon durchforstet und hier im forum gesucht und tausend sachen probiert, aber alles hat nichts geholfen.

soweit bin ich bisher:

//
// Färbe die gesuchten Worte bunt
//
$words = explode( ' ', $search_words );
for( $j = 0; $j < count( $words ); $j ++ )
{
$news[$i]['news_headline'] = preg_replace( "!($words[$j])!i", "<span class=\"blam\">$1</span>", $news[$i]['news_headline'] );
$news[$i]['news_text'] = preg_replace( "!($words[$j])!i", '<span class="blam">$1</span>', $news[$i]['news_text'] );
}
soweit funktioniert das auch, nur, dass eben urls mit geändert werden. Wie schließe ich die links aus?

Xerxes
24-01-2004, 16:06
Hab hier (http://www.dclp-faq.de/q/q-regexp-ersetzen.html) doch noch was gefunden:

// $s in $t durch $r ersetzen:
preg_replace("/((<[^>]*)|$s)/e", '"\2"=="\1"? "\1":"$r"', $t);

// $s case-insensitive in $t hervorheben:
preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"<b>\1</b>"', $t);

danke, falls sich schon jemand nen kopf gemacht hat ;-)