выделите слово в строке, если оно содержит ключевое слово

как писать сценарий, который заключает в себе все слово, если оно содержит ключевое слово? Пример: ключевое слово «fun», строка – птица смешная, результат – птица * смешная *. я делаю следующее

$str = "my bird is funny"; $keyword = "fun"; $str = preg_replace("/($keyword)/i","<b>$1</b>",$str); 

но это menshions только ключевое слово. моя птица весело

Попробуй это:

 preg_replace("/\w*?$keyword\w*/i", "<b>$0</b>", $str) 

\w*? соответствует любому символу слова перед ключевым словом (как можно меньше) и \w* любыми символами слова после ключевого слова.

И я рекомендую вам использовать preg_quote чтобы избежать ключевого слова:

 preg_replace("/\w*?".preg_quote($keyword)."\w*/i", "<b>$0</b>", $str) 

Для поддержки Unicode используйте флаг u и \p{L} вместо \w :

 preg_replace("/\p{L}*?".preg_quote($keyword)."\p{L}*/ui", "<b>$0</b>", $str) 

Вы можете сделать следующее:

  $str = preg_replace("/\b([az]*${keyword}[az]*)\b/i","<b>$1</b>",$str); 

Пример:

 $str = "Its fun to be funny and unfunny"; $keyword = 'fun'; $str = preg_replace("/\b([az]*${keyword}[az]*)\b/i","<b>$1</b>",$str); echo "$str"; // prints 'Its <b>fun</b> to be <b>funny</b> and <b>unfunny</b>' 
 <?php $str = "my bird is funny"; $keyword = "fun"; $look = explode(' ',$str); foreach($look as $find){ if(strpos($find, $keyword) !== false) { if(!isset($highlight)){ $highlight[] = $find; } else { if(!in_array($find,$highlight)){ $highlight[] = $find; } } } } if(isset($highlight)){ foreach($highlight as $replace){ $str = str_replace($replace,'<b>'.$replace.'</b>',$str); } } echo $str; ?> 

Здесь by am добавлен многопользовательский поиск в строке для вашей справки

 $keyword = ".in#.com#dot.com#1#2#3#4#5#6#7#8#9#one#two#three#four#five#Six#seven#eight#nine#ten#dot.in#dot in#"; $keyword = implode('|',explode('#',preg_quote($keyword))); $str = "PHP is dot .com the amazon.in 123455454546 dot in scripting language of choice."; $str = preg_replace("/($keyword)/i","<b>$0</b>",$str); echo $str; 

Найдите и выделите слово в строке, тексте, теле и абзаце:

 <?php $body_text='This is simple code for highligh the word in a given body or text'; //this is the body of your page $searh_letter = 'this'; //this is the string you want to search for $result_body = do_Highlight($body_text,$searh_letter); // this is the result with highlight of your search word echo $result_body; //for displaying the result function do_Highlight($body_text,$searh_letter){ //function for highlight the word in body of your page or paragraph or string $length= strlen($body_text); //this is length of your body $pos = strpos($body_text, $searh_letter); // this will find the first occurance of your search text and give the position so that you can split text and highlight it $lword = strlen($searh_letter); // this is the length of your search string so that you can add it to $pos and start with rest of your string $split_search = $pos+$lword; $string0 = substr($body_text, 0, $pos); $string1 = substr($body_text,$pos,$lword); $string2 = substr($body_text,$split_search,$length); $body = $string0."<font style='color:#FF0000; background-color:white;'>".$string1." </font> ".$string2; return $body; } ?>