Php 正则表达式和带后缀的匹配

Php 正则表达式和带后缀的匹配,php,regex,Php,Regex,我正在完成这个客户项目的最后一部分,测试和调试中还有最后一个问题。问题在于突出显示时基于基词的匹配 例如,搜索词为“contract”,正在搜索的文本可以包含“contracts,contracting,contracted”,它们都应该匹配并突出显示。然而,我也需要另一面,搜索词可以是“合同”,而被搜索的文本是“合同” 要搜索的文本来自数据库,我的SQL带来了正确的记录,我还将其缩小为几个句子以供预览。我尝试了一些想法,比如按单词长度匹配,比如“/[contract]{8,}/”,“contr

我正在完成这个客户项目的最后一部分,测试和调试中还有最后一个问题。问题在于突出显示时基于基词的匹配

例如,搜索词为“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);
}
//获取找到的记录的预览
$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,.]*)