【发布时间】:2022-01-23 15:59:03
【问题描述】:
<?php
$keywords1 = array("stack","stack overflow");
$keywords2 = array("stack overflow","stack");
$str1 = "stack overflow";
$str2 = "stack overflow";
foreach($keywords1 as $kw){
if (preg_match("~\b$kw\b~i", $str1)) {
$str1 = str_replace($kw,'<b>'.$kw.'</b>',$str1);
}
}
foreach($keywords2 as $kw){
if (preg_match("~\b$kw\b~i", $str2)) {
$str2 = str_replace($kw,'<b>'.$kw.'</b>',$str2);
}
}
echo $str1;
echo "<br>";
echo $str2;
?>
您好,如果在字符串中找到关键字,实际上我想将其加粗。为此,我正在使用 php preg_match() 方法。我的关键字存储在一个数组中,通过遍历每个关键字,我将其与我的字符串匹配,然后将其加粗。我在这里面临一个问题。以上两个字符串都给了我不同的输出。 str1 给我 stack 溢出,而 str2 给我 stack 溢出。 但是对于这两种情况,这两个词都应该是粗体的。请给我解决这个问题的方法。
我在https://www.paraphraser.site/ 上遇到了这个问题
【问题讨论】:
-
preg_replace("/\w*?$kw\w*/i", "$0", $str1);
-
你不需要迭代数组,只需用'|' join()并使用一个 preg_replace_all() 替换所有匹配项。像这样: $regex = join('|', $keywords); preg_match_all("/($regex)/i", "$1", $str);
-
@Movs 它不起作用兄弟!
-
@NoumanAli 作为一个想法,你可以在它之前用空格符号分割你的所有键。你会得到这样的结果:“stack overflow”。这是代码: $keys=array(); foreach($keywords as $key){ $keys=explode(" ", $key); } $regex = join('|', $keys); echo preg_replace("/($regex)/i", "$1", $str);
-
@Movs 又没用了兄弟!
标签: php