术语突出显示算法(HTML)

时间:2010-10-15 07:59:05

标签: php html algorithm

我知道有一些术语突出了问题,但据我所知,没有人回答我的问题。搜索字词放入数组

$keyarray = array("DE", "ABCD");
$string = "ABCDEF";
foreach ($keyarray as $value) {
   $string = str_ireplace($value, "<b>{$value}</b>", $string);
}

结果显然是ABC DE F而不是 ABCDE F 那么无论如何我可以使用PHP以极快的速度使用BOLD标签突出显示这两个术语?

3 个答案:

答案 0 :(得分:1)

“极快”是一个相对术语。除此之外,您有几个选择:

  • 正则表达式:如果你对正则表达式非常好,这对它们是有效的用法。您也可以向前/向后看,这样可以提供相当大的灵活性。

http://www.regular-expressions.info/lookaround.html

  • 字符解析:这通常是进行字符串操作(最快)的最佳方式,但创建时间最长。

  • 字符串替换;快速,但通常有一个边缘情况不能正常工作(从经验来讲)。

在所有这些情况下,您可以通过适当地对其进行排序/分组/过滤来预先优化您的术语列表。例如,从最大到最小的长度排序可以确保您没有通过在其中加入较短的字符串来拆分长字符串(并且错过匹配)。

您还可以在开始替换之前检查所有搜索词,从而预先确定最佳正则表达式。再次,这将假设你非常了解正则表达式。

答案 1 :(得分:0)

也许使用regexp:/de|acbd/。正则表达式是从左到右搜索它不会返回所以不会像<b>1111<b></b>112222</b>

这样的情况

答案 2 :(得分:0)

你可以试试这个:

$keyarray = array("DE", "ABCD");
$string = "ABCDEF";
$words = explode(' ',$string);
foreach($words as &$w){
   foreach($keyarray as $criteria) {
        if(stripos($w,$criteria)!==false){
            $w = "<b>$w</b>";
                    break;//avoid duplicate wrapping
        }
   }
}
$string = implode(' ',$words);