あなたが望むのは正規表現、特に preg_replace または peg_replace_callback です(あなたのケースではコールバックが推奨されます)
<?php
$searchString = "The car is driving in the carpark, he's not holding to the right lane.\n";
// define your word list
$toHighlight = array("car","lane");
単語を検索するには正規表現が必要であり、時間の経過とともにバリエーションや変更が必要になる可能性があるため、正規表現を検索単語にハードコーディングすることはお勧めできません。したがって、array_map を使用して配列をウォークスルーし、検索語を適切な正規表現に変換するのが最善です (ここでは、/ で囲み、「句読点まですべてを受け入れる」式を追加するだけです)。
$searchFor = array_map('addRegEx',$toHighlight);
// add the regEx to each word, this way you can adapt it without having to correct it everywhere
function addRegEx($word){
return "/" . $word . '[^ ,\,,.,?,\.]*/';
}
次に、見つけた単語を強調表示されたバージョンに置き換えたいとします。これは、動的な変更が必要であることを意味します。通常の preg_replace の代わりに preg_replace_callback を使用して、見つかったすべての一致に対して関数を呼び出し、それを使用して適切な結果を生成します。ここでは、見つかった単語を span タグで囲みます
function highlight($word){
return "<span class='highlight'>$word[0]</span>";
}
$result = preg_replace_callback($searchFor,'highlight',$searchString);
print $result;
収量
The <span class='highlight'>car</span> is driving in the <span class='highlight'>carpark</span>, he's not holding to the right <span class='highlight'>lane</span>.
したがって、これらのコード フラグメントを次々と貼り付けるだけで、明らかに動作するコードを取得できます。;)
編集: 以下の完全なコードは少し変更されました = 元の要求者が簡単に使用できるようにルーチンに配置されました。+ 大文字と小文字を区別しない
完全なコード:
<?php
$searchString = "The car is driving in the carpark, he's not holding to the right lane.\n";
$toHighlight = array("car","lane");
$result = customHighlights($searchString,$toHighlight);
print $result;
// add the regEx to each word, this way you can adapt it without having to correct it everywhere
function addRegEx($word){
return "/" . $word . '[^ ,\,,.,?,\.]*/i';
}
function highlight($word){
return "<span class='highlight'>$word[0]</span>";
}
function customHighlights($searchString,$toHighlight){
// define your word list
$searchFor = array_map('addRegEx',$toHighlight);
$result = preg_replace_callback($searchFor,'highlight',$searchString);
return $result;
}