PHPの勉強に「10 Life-Saving PHP Snippets」で紹介されているコードを読んでみる(Highlight specific words in a phrase)

PHPの勉強に「10 Life-Saving PHP Snippets」で紹介されているコードを読んでみる。

■Highlight specific words in a phrase(文中の語句を強調する)

ソースコードは次のようなもの。

function highlight($sString, $aWords) {
  if (!is_array ($aWords) || empty ($aWords) || !is_string ($sString)) {
    return false;
  }

  $sWords = implode ('|', $aWords);
  return preg_replace ('@\b('.$sWords.')\b@si',
                       '<strong style="background-color:yellow">$1</strong>',
                       $sString);
}

この関数では、次のような正規表現を作り、マッチした検索語句の前後にタグを挿入している。

@\b(検索語句1|検索語句2|検索語句3…)\b@si

正規表現中の「\b」は単語境界を表す。
パターン修飾子の「s」を指定すると改行を含む全ての文字にマッチする。
「i」は大小文字の違いを無視する。

したがって、この正規表現は検索語は文中の単語にマッチするが、単語の一部分にはマッチしない。

echo highlight('Highlights words in a phrase', array('word', 'phrase'));

実行結果

Highlights words in a <strong style="background-color:yellow">phrase</strong>

※文中の”words”は検索語”word”を含むがハイライトされない。

日本語は単語境界で区切られていないので、検索条件にマッチしない。

echo highlight('文中の語句を強調する', array('語', '強調'));

実行結果

文中の語句を強調する

※まったくハイライトされない

検索語句に正規表現で特別な意味を持つ文字があると、予期しない結果になる。

echo highlight('Highlights words in a phrase', array('w.*'));

実行結果

Highlights <strong style="background-color:yellow">words in a phrase</strong>

※wから始まる単語以降がハイライトされる

■一言

実際に使用するにはもう少し工夫が必要になるだろう。

コメント

  1. Pingback: 10 Life-Saving PHP Snippetsのコードリーディングまとめ « 山本隆の開発日誌

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください