PHP で文字列の大文字小文字を無視してハイライト

ちょっと、PostgreSQL の Webページのマニュアルに
全文検索をつけて、検索結果をクリックした場合のみ検索キーワードの背景に色をつけようと思って
いろいろアタックしていました。


大文字小文字を区別せずに、検索して前後に背景色していで

<font style="background-color:#ffff00">hogeHoge</font>

こんなふうにしたいと思ったので、以下のようにしてみました。

str_ireplace("$keyword","<font style=\"background-color:#ffff00\">$keyword</font>", $body)

だめでした。たとえば pgpool というキーワードだと Pgpool がひっかかったときに
pgpool に変換されてしまいます。

しかたがないので

preg_match("/{$keyword}/i", $body, $str);
$hbody = preg_replace("/$str[0]/","<font style=\"background-color:#ffff00\">$str[0]</font>", $body);

などとしてみましたが、これだと最初に出てきた大文字小文字の組み合わせに変換されてしまいます。
例: Pgpool の pgpool なんとかは -> Pgpool の Pgpool なんとかは


ふと、perl の参考書を読んで、$1 で指定できるというのを思い出しました。

preg_replace("/($keyword)/i","<font style=\"background-color:#ffff00\">$1</font>", $body);


やっぱり、日頃から preg を使った方がいいな思いました。
そもそも php 書く仕事したことないですが。