我正在尝试执行以下操作:
从文本块(当我说单词时,我的意思是单词或文本块中的数字)
例如
文本块:“欢迎使用 Stack Overflow!访问您的用户页面以设置您的姓名和电子邮件。”
如果您要搜索“访问您的”,它将返回:“欢迎来到 Stack Overflow!访问您的用户页面以设置您的”
我试过用这个
$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";
现在它适用于英语和希伯来语搜索短语,但是当有特殊字符(例如')时,结果文本会被剪切。
如何使模式返回搜索短语周围的文本,即使它包含特殊字符?