私は次のことをしようとしています:
テキストのブロックから、検索フレーズの前の 5 単語 (Y 単語しかない場合は Y) と検索フレーズの後の 5 単語 (または Y 単語しかない場合は Y) を取得します (単語を言うとき、単語を意味するか、テキストのブロックにあるものは何でも番号)
例えば
テキストのブロック: 「Stack Overflow へようこそ! ユーザー ページにアクセスして、名前と電子メールを設定してください。」
"visit your" を検索すると、"Welcome to Stack Overflow! Visit your user page to set your" が返されます。
私はこれを使ってみました
$preg_safe = str_replace(" ", "\s", preg_quote($search));
$pattern = "/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/ix";
if(preg_match_all($pattern, $full_text, $matches))
{
$result = str_replace(strtolower($search), "<span class='searched-for'>$search</span>", strtolower($matches[0][0]));
}
else
{
$result = false;
}
検索フレーズが英語の場合は機能しますが、他の言語でも機能する必要があります。たとえば、ヘブライ語の検索フレーズでは機能しません。
パターンを次のように変更しようとしました:
$pattern = "(*UTF8)/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/i";
しかし、うまくいきませんでした。
他の言語で機能させるにはどうすればよいですか?
////////////////// 編集 //////////
enrico.bacis が示唆したように、パターンを次のように変更しました。
$pattern = "/(\w\p{Hebrew}*\S\s+){0,20}\S*\b($preg_safe)\b\S*(\s\S+){0,20}/ixu";
英語とヘブライ語の検索フレーズで機能するようになりましたが、特殊文字 (' など) があると結果テキストが切り取られます。
特殊文字が含まれている場合でも、検索フレーズの周囲のテキストを返すパターンを作成するにはどうすればよいですか?