搜索结果突出显示:我正在使用下面的代码来搜索语料库/文本中的单词。代码在PHPFiddle上。仅匹配完整的单词(不区分大小写)。a
找到所有单词后,匹配的单词会被 HTML 锚标记包围。所以最终,我可以在调用函数后回显语料库,并获得突出显示搜索结果的语料库(取决于我使用的 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');
搜索结果导航:在语料库很大的情况下,单独突出显示并不能让用户轻松浏览匹配项。例如,用户可能希望能够通过 Next/Previous 按钮按顺序前往每个比赛。为了实现这一点,一个想法是给锚添加一个名称属性,即
...
return preg_replace($re, "<a name='$0' href='#'>$0</a>", $corpus);
...
然后,具有内部链接的单独锚点将能够导航到不同的匹配项。例如,单击下面的链接将导航到带有 的锚点name='hello'
。
<a href="#hello">Hello</a>
问题:我遇到的问题是使用$0
forname
属性似乎无法完成这项工作,因为可能有多个匹配项。请参阅JSFiddle上更长语料库的示例。有没有办法在使用时获得一些唯一的索引值preg_replace
?或者,有没有办法返回匹配词在语料库中的位置?也许还有另一种更好的方法来突出显示和导航。感谢您的投入