在数组中查找文本并使用<span> html标记将其包围,而不更改大小写</span>

时间:2014-05-16 19:05:53

标签: php regex

在PHP中我有一个数组,我想用html标签包围$ text的所有实例而不改变大小写。 例如:

$text = "aa";
array("aa", "baa", "aab", "bb", "Aa");

将成为

array("<span>aa</span>", "b<span>aa</span>", "<span>aa</span>b", "bb", "<span>Aa</span>");

使用str_ireplace会将Aa更改为aa

我已经尝试过:

preg_replace('.*(' . $text . ').*', '<span style="background-color: #FFFF00">"$1"</span>', $val);

但我收到此错误Unknown modifier '*''

编辑:

我可以使用什么正则表达式来实现结果,例如?

2 个答案:

答案 0 :(得分:3)

在正则表达式中:

你只是忘了在你的正则表达式周围加上括号。

$text = "aa";
$val = array("aa", "baa", "aab", "bb", "Aa");
$val = preg_replace('/.*(' . $text . ').*/i', '<span style="background-color: #FFFF00">"$1"</span>', $val);
print_r($val);

答案 1 :(得分:2)

看起来我已经太晚了,但这是我制作的非正则版本。

$text = "aa";
$input = array("aa", "aab", "baa", "bb", "Aa");

$output = array();
foreach($input as $in) {
    $pos = stripos($in, $text);
    $extract = substr($in, $pos, strlen($text));
    $output[] = substr_replace($in, "<span>$extract</span>", $pos, strlen($text));
}

var_dump($output);

//produces:

array (size=5)
  0 => string '<span>aa</span>' (length=15)
  1 => string '<span>aa</span>b' (length=16)
  2 => string 'b<span>aa</span>' (length=16)
  3 => string '<span>bb</span>' (length=15)
  4 => string '<span>Aa</span>' (length=15)