検索結果の強調表示: 以下のコードを使用して、コーパス/テキスト内の単語を検索しています。コードはPHPFiddleにあります。完全な単語のみが一致します (大文字と小文字は区別されません)。すべての単語が検出されると、一致した単語が HTML アンカーa
タグで囲まれます。したがって、最終的には、関数を呼び出した後にコーパスをエコーし、検索結果が強調表示されたコーパスを取得できます (使用する CSS によって異なります)。
function highlight($corpus, $words) {
preg_match_all("~\w+~", $words, $m);
if(!$m) return $corpus;
$re = "~\\b(" . implode("|", $m[0]) . ")\\b~i";
return preg_replace($re, "<a href='#'>$0</a>", $corpus);
}
$corpus = "Hello, world! Today is an amazing day!";
echo highlight($corpus, 'hello');
検索結果のナビゲーション: コーパスが大きい場合、強調表示だけでは検索結果を簡単に調べることができません。ユーザーは、たとえば、[次へ]/[前へ] ボタンを使用して、各試合に順番に移動できるようにしたい場合があります。これを実現するための 1 つのアイデアは、名前属性をアンカーに追加することです。つまり、
...
return preg_replace($re, "<a name='$0' href='#'>$0</a>", $corpus);
...
内部リンクを持つ個別のアンカーは、異なる一致に移動できます。たとえば、下のリンクをクリックすると、 でアンカーに移動しname='hello'
ます。
<a href="#hello">Hello</a>
問題: 私が抱えている問題は、複数の一致がある可能性がある$0
ため、name
属性を使用しても機能しないように見えることです。JSFiddleの長いコーパスでこの例を参照してください。使用中に一意のインデックス値を取得する方法はありpreg_replace
ますか? あるいは、一致した単語がコーパス内で見つかった位置を返す方法はありますか? 強調表示とナビゲーションを取得するための別のより良いアプローチがあるかもしれません。ご意見ありがとうございます