繁体   English   中英

正则表达式和后缀匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM