PHPでキーワードを強調表示
複数の特定のキーワードを強調表示、それを含む指定の単語を除外設定
・特定のキーワードを強調(□□コーヒーとコーヒー)
・そのキーワードが含まれる単語を強調しない(○○コーヒー、○○□□コーヒー)
PHP
// キーワードが含まれる文字列
$str = 'コーヒー、ミルク、○○コーヒー、○○ミルク、□□コーヒー、○○□□コーヒー、コーヒー××';
// 除外したいキーワードが含まれる単語
$exclude_words = array('○○コーヒー', '○○□□コーヒー');
$exclude_pattern = implode('|', $exclude_words);
// ○○コーヒー|○○□□コーヒー
// 強調したいキーワード
$target_words = array('コーヒー', '□□コーヒー');
$target_pattern = implode('|', $target_words);
// コーヒー|□□コーヒー
// 除外キーワードで改行
if (empty($exclude_pattern)) {
$str_exclude = $str;
} else {
$str_exclude = preg_replace('/(' . $exclude_pattern . ')/i', "\n$1\n", $str);
$lines = explode("\n", $str_exclude);
}
$str_replace = '';
foreach($lines as $linesKey => $linesVal) {
$flg = false;
foreach ($exclude_words as $excludeWordsVal) {
// 行が除外キーワードにマッチするか
if ($linesVal == $excludeWordsVal) {
$flg = true;
break;
}
}
if ($flg) {
// 除外キーワードであれば処理しない
$str_replace = $str_replace . $linesVal;
} else {
// 除外キーワードが含まれない行であれば、キーワードとマッチしたら強調
$str_replace = $str_replace . preg_replace('/(' . $target_pattern . ')/i', '<em>${1}</em>', $linesVal);
}
}
コーヒー、ミルク、○○コーヒー、○○ミルク、□□コーヒー、○○□□コーヒー、コーヒー××
除外キーワードが空の場合
$exclude_words = array();
$target_words = array('コーヒー', '□□コーヒー');
コーヒー、ミルク、○○コーヒー、○○ミルク、□□コーヒー、○○□□コーヒー、コーヒー××
某先輩が数年前に作成した同じようなプログラムが除外処理が全くできていなかったので試しに組んでみました。