这是一个问题,我已经想出了如何解决,但我想以一种更简单的方式解决它...我试图改进为程序员。PHP:在字符串中加入重叠关键字的缺点
已经做了我的研究,并没有找到一个优雅解决以下问题:
我有一个关键字假设阵列搜索:
$keyword_array = array('he','heather');
和假设的字符串:
$text = "What did he say to heather?";
最后,一个假设的功能:
function bold_keywords($text, $keyword_array)
{
$pattern = array();
$replace = array();
foreach($keyword_array as $keyword)
{
$pattern[] = "/($keyword)/is";
$replace[] = "<b>$1</b>";
}
$text = preg_replace($pattern, $replace, $text);
return $text;
}
功能(不是太奇怪的)这样的事返回:
"What did <b>he</b> say to <b>he</b>ather?"
因为它是不承认“海瑟”时,有在它的中间有一个大胆的标签。
我想最终的解决方案做的是,尽可能简单,返回以下两个字符串之一:
"What did <b>he</b> say to <b>heather</b>?"
"What did <b>he</b> say to <b><b>he</b>ather</b>?"
最后的一些条件:
- 我想最后的解决方案处理大量可能的关键字
- 我希望它能处理以下两种情况(线表示重叠字符串):
一个字符串吞噬其他的,像下面的两个例子:
- 他,石楠
- 打磨,并
或者一个字符串不不吞噬其他:
- 夹带,培训
可能的方法来解决:
-A REG当然,无视在关键字标签
- 长的方式(即我试图避免):
*为每个关键字出现的所有搜索字符串,存储关键字的位置的数组(开始和结束)是粗体
*处理这个数组递归结合重叠的关键字,所以没有冗余
*添加粗体标记(从字符串的末端开始,以避免将信息从所述其他字符移位位置)
非常感谢提前!
谢谢您的回答。这看起来好像适用于特定的情况,但不喜欢在我提到的所有情况下都能正常工作。例如:$ keyword_array = array('heat','ather')。 –
@Nathan假设您正在尝试构建一个真实世界的应用程序:您是否知道在嵌套或联锁粗体标记中没有Point? – vzwick
@vzwick:我同意这不是一个好习惯......但是我认为大多数浏览器都不会“窒息”它......我只是在Firefox和Chrome上测试了一个例子,它似乎工作正常。 –