【发布时间】:2012-10-15 10:30:04
【问题描述】:
我正在尝试执行以下操作:
从一段文本(当我说单词时,我表示文本块中的单词或数字)
例如
文本块:“欢迎使用 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";
现在它适用于英语和希伯来语搜索短语,但当有特殊字符(例如')时,结果文本会被剪切。
如何使模式返回搜索短语周围的文本,即使它包含特殊字符?
【问题讨论】: