[英]RegEx And Matching With Suffix
我是这个客户项目的最后一部分,而测试和调试是最后一个问题。 问题在于基于基词的匹配以进行突出显示。
例如,搜索词是“ contract”,正在搜索的文本可以包含“ contracts,contracting,contracted”,都应匹配并突出显示。 但是,我还需要另一面,搜索词可以是“合同的”,正在搜索的文本是“合同的”。
要搜索的文本来自数据库,而我的SQL引入了正确的记录,我还缩小了几句话来进行预览。 我尝试弄乱了一些想法,例如按单词长度进行匹配,例如“ / [contract] {8,} /”,“ contracts”,这在示例的第一部分中是有效的。
这是相关事件代码示例:
//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);
}
谢谢戴夫
您可以使用以下内容查找完整的单词(直到空格\\换行之前的所有内容)
(contract[^\s,.]*)
查看https://regex101.com/r/SbhZGo/2以获取示例
就您而言,您可以将合同替换为任何单词,例如:
(ball[^\s,.]*)
会找到球,球,气球等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.