【问题标题】:PHP Search Through Files for Keyword (case insensitive)?PHP通过文件搜索关键字(不区分大小写)?
【发布时间】:2020-07-09 22:15:20
【问题描述】:

所以我有以下功能:

function findMatches($pathToDirectory, $keyword){
    $results = array();
    $htmlString = "";
    $fileList = glob($pathToDirectory);
    natsort($fileList);

    foreach ($fileList as $search) {
        $contents = file_get_contents($search);
        $episodeTitle = fgets(fopen($search, 'r'));
        $episodeTitle = "<p class='episode_title'>$episodeTitle</p>";
        $sentences = preg_split('/(?<=[.])\s+(?=[a-z])/i', $contents);
        foreach ($sentences as $sentence) {
            if (strpos($sentence, $keyword)) {
                if (!in_array($episodeTitle, $results)) {
                    array_push($results, $episodeTitle);
                }
                array_push($results, $sentence);
            }
        }
    }
    foreach ($results as $result){
        $highlightedKeyword = '<span class="keyword_highlight">' . $keyword . '</span>';
        $newResult = str_replace($keyword, $highlightedKeyword, $result);

        $htmlString .= '<p class="search_result">' . $newResult . '</p>';
    }
    $totalResults = 'Total Results: <span class=\'number_result\'>' . count($results) . '</span>';
    return $htmlString = $totalResults . $htmlString;
}

它打开目录中的每个文本文件 ($filelist),获取其内容,将它们拆分成句子 ($sentences),然后将包含用户定义关键字的句子保存到数组中 ($results )。然后,它遍历$results 以将关键字包装在 HTML 中(以便单词在句子中突出显示给用户),最后它在 HTML 中包装每个句子并将它们发送给用户。

但是,目前该函数区分大小写。什么是使它不区分大小写的好方法?我尝试在foreach ($sentences as $sentence) 循环中使用stripos() 而不是strpos(),这使得搜索本身不区分大小写(就像我想要的那样),但问题是我无法弄清楚如何突出显示大写和小写版本如果我以这种方式编写函数,则单词的正确性。

如果您需要对此进行澄清,请告诉我,我不确定我是否解释得很好

【问题讨论】:

    标签: php regex


    【解决方案1】:

    在进行突出显示时,您需要使用stripos()str_ireplace()

    【讨论】:

    • 因此,当我这样做时,它实际上会更改句子本身,因此每次出现关键字时,如果您输入大写,则它是大写的,反之亦然。例如,如果我搜索“Apples”,它可以突出显示“Apples”的所有实例,但实际上它会将小写形式“apples”的所有实例也更改为大写
    • 然后使用stripos() 获取位置并在该位置之前插入标签,而不是str_replace(),因为您知道关键字的长度,所以在关键字之后插入结束标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多