Php 正则表达式和带后缀的匹配
我正在完成这个客户项目的最后一部分,测试和调试中还有最后一个问题。问题在于突出显示时基于基词的匹配 例如,搜索词为“contract”,正在搜索的文本可以包含“contracts,contracting,contracted”,它们都应该匹配并突出显示。然而,我也需要另一面,搜索词可以是“合同”,而被搜索的文本是“合同” 要搜索的文本来自数据库,我的SQL带来了正确的记录,我还将其缩小为几个句子以供预览。我尝试了一些想法,比如按单词长度匹配,比如“/[contract]{8,}/”,“contracts”,在示例的第一部分中,它是有效的 以下是相关代码示例:Php 正则表达式和带后缀的匹配,php,regex,Php,Regex,我正在完成这个客户项目的最后一部分,测试和调试中还有最后一个问题。问题在于突出显示时基于基词的匹配 例如,搜索词为“contract”,正在搜索的文本可以包含“contracts,contracting,contracted”,它们都应该匹配并突出显示。然而,我也需要另一面,搜索词可以是“合同”,而被搜索的文本是“合同” 要搜索的文本来自数据库,我的SQL带来了正确的记录,我还将其缩小为几个句子以供预览。我尝试了一些想法,比如按单词长度匹配,比如“/[contract]{8,}/”,“contr
//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);
}
//获取找到的记录的预览
$RecordFound=$Title;
$SearchInput=$TestText;
$regexpatern=preg_quote($SearchInput,“/”);
$regexpatern=“/^.*$regexpatern.*\n.*\n.\$/m”;
if(preg_match_all($regexpatern、$RecordFound、$matches)){
echo$PostID。“-Area=“.$AreaPK.”Type=“.$TypePK;
回声“
”;
//发送预览以突出显示
回声突出显示(内爆(“\n”,$matches[0]),$SearchInput);
回声“
”;
}
函数突出显示($text,$words){
preg_match_all(“~\w+~”,$words,$m);
如果(!$m)
返回$text;
$re='~\\b('.内爆('|',$m[0])。\\b~i';
返回preg_replace($re,$0',$text);
}
谢谢,
Dave您可以使用以下内容查找完整单词(空格前的所有内容\新行) 查看示例 在您的情况下,您可以用任何词语替换合同,即:
(ball[^\s,.]*)
将找到球、球、气球等“会有…?”:答案不是用来提问的。改为发表评论。已经有答案了,它很好地回答了他的要求。然而,我在问,对于一个他没有提到的案例,他是否需要改进答案@trincotAnd,@Maslo,这就是评论的目的。Maslo,这是可能的,并且考虑过这一点。然而,我今天的心情是,用户也应该考虑他们在搜索什么。我通常没有那种心情,但这部分的项目让我非常沮丧,我自己更是如此,无法理解正则表达式。我正从桌面环境走向网络,但并没有达到应有的水平。然而,我会使用你的snippit吗?@Maslo,我喜欢你发送的链接,它可能正是我一直在寻找的工具。
[contract]{8,}
是8个或更多的c
,o
,n
,t
,r或a`字符。试着签合同.
。。。在SQL中,您可以使用like像'contract%'
(ball[^\s,.]*)