2

次のように、文字列内の 1 つの単語を強調表示できます。

$str = "my bird is funny";
     $keyword = "fun";
     $str = preg_replace("/($keyword)/i","<b>$0</b>",$str);

Ant これは私に与えます: 私の鳥は楽しいですny

しかし、キーワードが複数の単語からなる場合、たとえば次の場合にこれを機能させる方法

$keyword = "bird fun";

この結果を取得したい: 私の楽しいnny

4

3 に答える 3

5

正規表現の最も基本的な概念の 1 つは、代替です。または のいずれかbird|funに一致します。この交代は、 andを使用して簡単に生成できます。birdfunimplodeexplode

$keywords = explode(' ', trim($keyword));
$str = preg_replace('/'.implode('|', $keywords).'/i', '<b>$0</b>', $str);

pritaeas が指摘したように、次のものも使用できますstr_replace

$str = preg_replace('/'.str_replace(' ', '|', trim($keywords)).'/i', '<b>$0</b>', $str);

もちろん、$keyword自分で書いて他の場所で使用しない場合は、すぐに正規表現として書きます。

$keyword = 'bird|fun';

あるいは

$keyword = '/bird|fun/i';

この方法では、爆発や内破はまったく必要ありません。

于 2012-11-19T10:09:15.320 に答える
5
$str = "my bird is funny";
$keyword = "bird fun";
$keyword = implode('|',explode(' ',preg_quote($keyword)));
$str = preg_replace("/($keyword)/i","<b>$0</b>",$str);

見る

于 2012-11-19T10:12:04.517 に答える
1

これを試して:

<?
$str = "my bird is funny";
     $keyword= array("bird","fun");
     foreach($keyword as $k=>$v)
{
     $str = preg_replace("/($v)/i","<b>$0</b>",$str);
}
//echo $str;
?>
于 2012-11-19T10:27:02.223 に答える