Replace words found in string with highlighted word keeping their case as found
To highlight a single word case-insensitively
Use
preg_replace()
with the following regex:/\b($p)\b/i
Explanation:
/
- starting delimiter\b
- match a word boundary(
- start of first capturing group$p
- the escaped search string)
- end of first capturing group\b
- match a word boundary/
- ending delimiteri
- pattern modifier that makes the search case-insensitive
The replacement pattern can be
<span style="background:#ccc;">$1</span>
, where $1
is a backreference — it would contain what was matched by the first capturing group (which, in this case, is the actual word that was searched for)
Code:
$p = preg_quote($word, '/'); // The pattern to match
$string = preg_replace(
"/\b($p)\b/i",
'<span style="background:#ccc;">$1</span>',
$string
);
To highlight an array of words case-insensitively
$words = array('five', 'colors', /* ... */);
$p = implode('|', array_map('preg_quote', $words));
$string = preg_replace(
"/\b($p)\b/i",
'<span style="background:#ccc;">$1</span>',
$string
);
var_dump($string);
Comments
Post a Comment