PHP-Programmierung – preg_match()
Webseite mit Markup versehen
Hervorhebung ___
Sie möchten eine Webseite so anzeigen, dass bestimmte Wörter hervorgehoben sind. Verwenden
Sie dazu preg_replace( ) mit einem Array aus Mustern und Ersetzungstexten:
$patterns = array(‘\bHund\b/’,’\bKatze\b’);
$replacements = array(‘ style=”color:black;backgroundcolor=#FFFF00″>Hund’,’Katze‘);
while ($page) {if (preg_match(‘{^([^]*)?(?[^>]+?>)?(.*)$}’,$page,$matches)) {
print preg_replace($patterns,$replacements,$matches[1]);
print $matches[2];
$page = $matches[3];
}}
Der mit preg_match( ) verwendete reguläre Ausdruck findet eine Übereinstimmung mit einem
möglichst langen Text vor einem HTML-Tag, dem HTML-Tag und schließlich dem Rest des Inhalts. Auf den Text vor dem HTML-Tag wird die Hervorhebung angewandt, das HTML-Tag wird ohne Hervorhebung ausgegeben, und der Rest des Inhalts wird nach denselben Übereinstimmungen durchsucht. Damit wird vermieden, dass Wörter, die sich innerhalb von HTML-Tags befinden (zum Beispiel in URLs oder alt-Text), hervorgehoben werden und dadurch die Seite nicht mehr korrekt angezeigt wird.
Das folgende Programm liest den URL in $url aus und hebt die Wörter im Array $words hervor. Wörter werden nicht hervorgehoben, wenn sie Teil eines längeren Worts sind, da die Übereinstimmungen mit dem Perl-kompatiblen Operator \b für die Suche nach Wortgrenzen gesucht werden.
$colors = array(‘FFFF00′,’FF9900’, ‘FF0000′,’FF00FF’,’99FF33′,’33FFCC’,’FF99FF’, ’00CC33′);
// Regex-Ausdrücke bilden.
$patterns = array();
$replacements = array();
for ($i = 0, $j = count($words); $i $j; $i++) {$patterns[$i] = ‘/\b’.preg_quote($words[$i], ‘/’).’\b/’;
$replacements[$i] = ‘ “color:black;background-color:#’.Anzeige $colors[$i % 8] .'”>’ . $words[$i] .”;
}
// Seite einlesen.
$s = file_get_contents($url);
if ($j) {
while ($s) {
if (preg_match(‘{^([^]*)?(?[^>]+?>)?(.*)$}s’,$s,$matches))
{
print preg_replace($patterns,
$replacements,$matches[1]);
print $matches[2];
$s = $matches[3];
}
}
}
else {
print $s;
}
Mehr Informationen zum Herausfiltern vonText innerhalb von HTML-Tags mit Hilfe von preg_match() gibt es unter www.php.net/preg-match.