Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在字符串中加粗一些单词并删除一些未绑定的单词_Php_Regex_String - Fatal编程技术网

Php 在字符串中加粗一些单词并删除一些未绑定的单词

Php 在字符串中加粗一些单词并删除一些未绑定的单词,php,regex,string,Php,Regex,String,我正在创建一个搜索引擎。目前,我的脚本将关键字中的匹配词加粗。但是有些关键词太长,比如沙鲁克汗的搜索结果: 25216d1235653089shahrukh khans 壁纸沙阿·鲁克演员 如您所见,上面的关键字太长。所以,我需要它像: 沙鲁克汗壁纸 或 shah rukh演员 目前,我正在使用以下代码,但在粗体标记前后需要一个空格。因此,如果第一个单词是粗体的,它将显示整个关键字 if(strlen($img_keyword)>30){ $img_keyword = preg_

我正在创建一个搜索引擎。目前,我的脚本将关键字中的匹配词加粗。但是有些关键词太长,比如沙鲁克汗的搜索结果:

25216d1235653089shahrukh khans 壁纸沙阿·鲁克演员

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

沙鲁克汗壁纸

shah rukh演员


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

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

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

嗯,据我所知,粗体文本前后不需要空格,所以为什么不删除空格,在图案的开头添加一个起始锚点,在图案的结尾添加一个结束锚点?像这样:

$img_keyword = preg_replace('/^(.*?)<b>(.*?)<\/b>(.*?)$/us'," <b>$2</b> ",$img_keyword);
$img_关键字=preg_replace('/^(.*?(.*?)(.*?)$/us',“$2”,$img_关键字);

在弗兰兹的帮助下,我编辑了下面提到的代码

 $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);
 }
$img\u关键字=粗体文本($query,$img\u关键字);
如果(strlen($img_关键字)>30){
$img_keyword=preg_replace('/^(.*?(.*?)(.*?)(.*?)/u'、“$2”、$img_keyword);
}
如果(strlen($img_关键字)>30){
$img_关键字=preg_replace('/(.*?)/x','',$img_关键字);
}
如果(strlen($img_关键字)>30){
$img_keyword=preg_replace('/(.**?$|)(.**?$/x','',$img_keyword);
}

如果关键字是

kajol shah rukh vogue印度蓝宝石

结果是

沙鲁克


如果关键字是

p 18 mFEk4J448M labelsadt 0%2语言en%2 Posttag feroz khan%2 Posttag khan于4月27日去世%2 Posttag不再是宝莱坞的风格图标%2 Posttag

结果是

可汗



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

我不明白你想做什么。你能再说一遍吗?我只需要删除字符串中的粗体字。这个字符串>“这是关键字一”到这个>“是关键字”这是错误的搜索方式。如果有人找rukh shah怎么办?你现在这样做有什么不对?这似乎是一个抓取粗体内容的正则表达式,有什么不对?@SanHolo:如果有人搜索rukh shah,它会显示shah rukh,因为我正在使用MySQL全文搜索。谢谢你的回答。现在,当我搜索时,它只显示第一个匹配词作为关键字。例如:当我搜索“Shah Rukh Khan”时,图像的关键字是shahI,我也尝试了这个“/^(.*?(.*?)(.*?)/us”,一些图像关键字是可以的。但是,一些很长的关键词,比如khan%2Cposttag khan于4月27日去世%2Cposttag不再是了%2Cposttag宝莱坞的风格图标是一样的……对不起。移除u修改器。这样:$img_关键字=preg_替换('/^(.*?(.*?)(.*?)$/s',“$2”,$img_关键字);