我在这个客户项目的最后一部分,并且在测试和调试方面有最后一个问题。问题在于基于基础词的匹配,用于突出显示。
例如,搜索词是" contract",正在搜索的文本可以包含"合同,签约,签约",这些都应该匹配并突出显示。但是,我还需要翻页,搜索词可能是"签约",正在搜索的文本是" contract"。
要搜索的文本来自数据库,我的SQL正在引入正确的记录,我还将其缩小到几个句子进行预览。我尝试了一些想法,例如匹配字长,例如" / [合同] {8,} /","合同",这对第一部分起作用,例子。
这是相关的代码示例:
//Get Preview Of Found Records
$RecordFound = $Title;
$SearchInput = $TestText;
$RegExPattern = preg_quote($SearchInput, '/');
$RegExPattern = "/^.*$RegExPattern.*\n.*\n.*\$/m";
if(preg_match_all($RegExPattern, $RecordFound, $matches)){
echo $PostID." - Area = ".$AreaPK." Type = ".$TypePK;
echo "<br/>";
//Send Preview For Highlighting
echo highlight(implode("\n", $matches[0]), $SearchInput);
echo "<br/>";
}
function highlight($text, $words) {
preg_match_all('~\w+~', $words, $m);
if(!$m)
return $text;
$re = '~\\b(' . implode('|', $m[0]) . ')\\b~i';
return preg_replace($re, '<SPAN style="BACKGROUND-COLOR: #ffff00"><b>$0</b></SPAN>', $text);
}
谢谢, 戴夫
答案 0 :(得分:0)
您可以使用以下内容查找完整的单词(所有内容直到空格\新行)
(contract[^\s,.]*)
查看https://regex101.com/r/SbhZGo/2示例
在您的情况下,您可以用任何单词替换合同,即:
(ball[^\s,.]*)
会找到球,球,气球等