0

文字列内のハッシュタグを見つけてリンクに変換するコードを実行しています。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_allpreg_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ループ内にあり、リストを生成しています

4

1 に答える 1