0

ここにキーワード「太字」機能があります:

$ignore = array ('div', 'class', 'high', 'light', 'highlight');
$keywords = explode(' ', $qsvarus);
$title[$key] = preg_replace('/'.implode('|', $keywords).'/i', '<b>$0</b>', $title[$key]);
$infoo[$key] = preg_replace('/'.implode('|', $keywords).'/i', '<b>$0</b>', $infoo[$key]);

問題は、いくつかの html タグをキャッチすることがあります。<b></b>$keywordsのときに $ignore 配列から 3 文字より短いものと特定の単語をすべて無視するように指示するにはどうすればよいですか?

4

1 に答える 1

2

最初にキーワード配列をループして、無視配列 (in_array を使用) 内の一致と、3 文字以下のキーワードをすべて削除します。

次に、タグに含まれていないことを確認したい場合は、次のようにすれば十分です。

/\b(keyword|keyword|keyword)\b(?![^<]*[>])/

私は基本的に否定的な先読みを追加しました:

(?![^<]*[>])

>正規表現は、開始タグが前にない終了 html の先読みが<一致しない限り一致します。終了タグを取得した場合、タグの内側にいると想定できる*はずです。

それを preg_replace に戻します。

preg_replace('/\b('.implode('|', $keywords).')\b(?![^<]*[>])/i', '<b>$1</b>', $subject);
  • >これは、エンコードされていない大なり ( )がないことを前提としています。
于 2012-12-11T11:20:02.713 に答える