In the function below, I want to match the keyword case insensitive (should match “Blue Yoga Mats” and “blue yoga mats”)…
However, it currently only matches if the keyword is the same case.
$mykeyword = “Blue Yoga Mats”;
$post->post_content = preg_replace_callback("/\b($mykeyword)\b/","doReplace", $post->post_content);
// the callback function
function doReplace($matches)
{
static $count = 0;
// switch on $count and later increment $count.
switch($count++) {
case 0: return '<b>'.$matches[1].'</b>'; // 1st instance, wrap in bold
case 1: return '<em>'.$matches[1].'</em>'; // 2nd instance, wrap in italics
case 2: return '<u>'.$matches[1].'</u>'; // 3rd instance, wrap in underline
default: return $matches[1]; // don't change others.
}
}
Simply add the
imodifier to your regex to make it perform a case insensitive match:By the way, if you haven’t already, you need to escape special regex characters from your keyword. In case any are present, they could screw up your regex and cause PHP warnings/errors. Call
preg_quote()before you perform the replacement: