キーワードにマッチした部分をハイライト表示する
任意の文字列のうち、(複数の)キーワードにマッチする部分をstrongタグで囲むサンプルです。
PHP5で動作確認済みです。
このコードはどこかから持ってきたものです(w
関数を紐解いていくと何となく処理が理解できてきます。たぶん。
- preg_quote関数は特殊文字をエスケープ
- create_function関数は匿名関数を定義できる
- preg_replace_callbackは、正規表現検索でマッチした文字をコールバック関数に渡すことができる
- substr関数は、第2引数の位置から第3引数の位置まで文字を切り出すもの
最初にキーワードをpreg_quote関数で特殊文字をエスケープ。
あとはキーワードごとに正規表現検索をして、コールバック関数を使用して置換。てなイメージでしょうか。
/** * キーワードにマッチした部分をハイライト表示できる形式で返します。 * * @param $arr キーワードが格納された配列 * @param $str ハイライト変換対象の文字列 * @return ハイライト化された文字列(strongタグで囲む) */ function to_highlight_keyword($arr, $str) { if (!$arr || count($arr) < 1) { return $str; } foreach ($arr as $val) { $val = preg_quote($val, '/'); $str = preg_replace_callback( "/<.*?>|($val)/i", create_function('$matches', 'return (substr($matches[0], 0, 1) == "<") ? ' . ' $matches[0] : "<strong>$matches[1]</strong>";'), $str ); } return $str; }