文字列内のハッシュタグを見つけてリンクに変換するコードを実行しています。preg_match_all
以下に示すように使用してこれを行いました。
if(preg_match_all('/(#[A-z_]\w+)/', $postLong, $arrHashTags) > 0){
foreach ($arrHashTags[1] as $strHashTag) {
$long = str_replace($strHashTag, '<a href="#" class="hashLinks">'.$strHashTag.'</a>', $postLong);
}
}
また、私の検索スクリプトでは、結果文字列で検索キーワードを太字にする必要があります。を使用した以下のコードに似たものpreg_replace
:
$string = "This is description for Search Demo";
$searchingFor = "/" . $searchQuery . "/i";
$replacePattern = "<b>$0<\/b>";
preg_replace($searchingFor, $replacePattern, $string);
私が抱えている問題は、両方が一緒に動作する必要があり、組み合わせた結果としてスローされる必要があることです。考えられる 1 つの方法はpreg_match_all
、preg_replace
コードを使用して結果の文字列を実行することですが、タグと検索された文字列が同じ場合はどうなるでしょうか? 2 番目のブロックでは、タグも太字になりますが、これは望ましくありません。
以下の回答に基づいて実行中のコードを更新しますが、それでも機能しません
if(preg_match_all('/(#[A-z_]\w+)/', $postLong, $arrHashTags) > 0){
foreach ($arrHashTags[1] as $strHashTag) {
$postLong = str_replace($strHashTag, '<a href="#" class="hashLinks">'.$strHashTag.'</a>', $postLong);
}
}
そして、この直後に、これを実行します
$searchingFor = "/\b.?(?<!#)" . $keystring . "\b/i";
$replacePattern = "<b>$0<\/b>";
preg_replace($searchingFor, $replacePattern, $postLong);
ご存知のように、これはすべてwhile
ループ内にあり、リストを生成しています