在字符串中加粗一些单词并删除一些未说出的单词

时间:2009-10-31 19:46:56

标签: php regex string

我正在创建一个搜索引擎。目前,我的脚本会粗体显示关键字中的匹配单词。但有些关键字太长了,比如 shah rukh khan 的结果:

  

25216d1235653089 shahrukh khan s   壁纸 shah rukh 演员

如您所见,上述关键字太长。所以,我需要它像:

  

shahrukh khan 的壁纸

  

shah rukh 演员


目前,我使用以下代码,但在粗体标记之前和之后需要一个空格。因此,如果第一个单词是粗体,则显示整个关键字。

if(strlen($img_keyword)>30){
    $img_keyword = preg_replace('/(.*?) <b>(.*?)<\/b> (.*?)/us',
      " <b>$2</b> ",
      $img_keyword);
}

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

好吧,据我所知,你不需要前面和后面的空格,所以你为什么不删除空格,在开头添加一个起始锚点,在结束时添加一个结束锚点模式的结束?像这样:

$img_keyword = preg_replace('/^(.*?)<b>(.*?)<\/b>(.*?)$/us'," <b>$2</b> ",$img_keyword);

答案 1 :(得分:0)

Franz 的帮助之后,我编辑了我的代码,如下所述。

 $img_keyword = boldText($query, $img_keyword);
 if(strlen($img_keyword)>30){
 $img_keyword = preg_replace('/^(.*?)<b>(.*?)<\/b>(.*?)/u',"<b> $2 </b>",$img_keyword);
     }
if(strlen($img_keyword)>30){
$img_keyword = preg_replace('/<\/b>(.*?)<b>/x'," ",$img_keyword);
   }
if(strlen($img_keyword)>30){
$img_keyword = preg_replace('/<\/b>(.*?)$|(.*?)<b>$/x',"</b> ",$img_keyword);
 }

如果关键字是

  

kajol shah rukh vogue india blumarine

结果是

  

shah rukh

     

如果关键字是

  

p 18 mFEk4J448M labelsadt 0%2Clanguage en%2Cposttag feroz khan%2Cposttag khan于4月27日死亡%2Cposttag不再是%2Cposttag宝莱坞的风格图标

结果是

  khan khan

     

有没有办法保留一两个单词并删除其他单词?