$value['keyword']='P|$$';<br>
$keyword = preg_quote($value['keyword'], '/');<br>
$question = "verying P|$$ quedon";<br>
echo $abc = preg_replace( "/\b($keyword)\b/i",'<span style="color:red">$1</span>',$question);<br>
Я хочу соответствующее ключевое слово строки в красном цвете
Граница слова после $
требует, чтобы слово char появилось сразу после него, так что здесь нет замены.
Вам необходимо заменить границы слова однозначными границами, определенными с помощью (?<!\w)
а также (?!\w)
поиск обходных путей, которые не будут соответствовать, если ключевым словам предшествует или сопровождается символами слова:
$value['keyword']='P|$$';
$keyword = preg_quote($value['keyword'], '/');
$question = "verying P|$$ quedon";
echo $abc = preg_replace( "/(?<!\w)($keyword)(?!\w)/i",'<span style="color:red">$1</span>',$question);
Увидеть PHP демо
Других решений пока нет …