RegEx和后缀匹配

时间:2017-01-20 19:04:15

标签: php regex

我在这个客户项目的最后一部分,并且在测试和调试方面有最后一个问题。问题在于基于基础词的匹配,用于突出显示。

例如,搜索词是" 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);
}

谢谢, 戴夫

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容查找完整的单词(所有内容直到空格\新行)

(contract[^\s,.]*)

查看https://regex101.com/r/SbhZGo/2示例

在您的情况下,您可以用任何单词替换合同,即:

(ball[^\s,.]*)

会找到球,球,气球等

相关问题