将<em>和</em>放在每个找到的关键字的开头和结尾

时间:2009-12-29 01:03:13

标签: php string pcre

我是preg的新手,想要找到我在数组中得到的一些字符串并强调每一个字符串。

例如

  array[0] = "windows";
  array[0] = "windows xp";

  text will be: <em>windows</em> is bla bla...<em>windows xp</em> is bla bla

我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

非常简单的替换,无需preg _ *:

$mytest = "Windows XP was all right, but I like Windows 7 better!°";
$replacement = "Windows XP";
echo str_replace($replacement, "<em>".$replacement."</em>", $mytest);

您也可以替换数组。 [手动输入] [1]

答案 1 :(得分:1)

如果您正在搜索并替换文字,这很容易:

$text = 'windows xp';
$input = '....';
$output = str_replace($text, '<em>' . $text . '</em>', $input);

如果您将一个HTML块存储为字符串,则需要考虑另一个问题:如果用户搜索的文本是标记或属性名称或值的一部分,该怎么办?如果你想强调“强”,你不想替换它:

<strong>some text</strong>

使用:

<<em>strong</em>>some text</<em>strong</em>>

因为您的标记将不再有效。

这就是在标记上使用简单搜索和替换或正则表达式的问题。处理此问题的最佳方法是将标记转换为DOM树,然后在文本节点上执行替换。即使这有问题。如果你想突出显示“windows xp”,你想强调这种情况:

windows <i>xp</i>

为了使用它,它显示为“windows xp”,因此假设用户想要突出显示它是合理的。

答案 2 :(得分:0)

$string = preg_replace("(windows( xp)?)", "<em>$0</em>", $string)