【问题标题】:PHP: Search in textfile after specific phrases / words and outputPHP:在特定短语/单词后在文本文件中搜索并输出
【发布时间】:2011-06-13 22:59:46
【问题描述】:

我正在尝试制作一个小的 php 脚本来自动化一些工作流程。 脚本要做的是读取一个文件(每个文件大约 10-20kb)。 然后我需要在文件中搜索一些特定的短语并输出——如果出现这些短语——行号和短语。

例如,我有一个正在阅读和搜索的文本文件。我搜索短语“花是黄色的”、“马是白色的”和“混合的”;

那么我的输出是:

第 4 行:“马是白色的” 第 19 行:“混合;” 第 22 行:“混合;” 第 99 行:“花是黄色的” ……等等。

我正在使用这段代码,它正确地输出了每一行和行号,但我无法制作一个只输出搜索到的短语的搜索例程:

<?php
$lines = file('my-text-file.txt');

foreach ($lines as $line_num => $line) {
    echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
?>  

我的想法是使用 strpos ,然后每次我发现短语的出现时,它都会将它放入一个数组(或字典)中,其中行号作为键,短语作为值但没有'无法使其工作,我认为可能有更好,更有效的方法。

任何帮助或建议我将不胜感激。

谢谢
- 梅斯蒂卡

【问题讨论】:

    标签: php arrays foreach readfile strpos


    【解决方案1】:
    function search ( $what = array (), $filePath ) {
        $lines = file ( $filePath );
    
        foreach ( $lines as $num => $line ) {
            foreach ( $what as $needle ) {
                $pos = strripos ( $line, $needle );
                if ( $pos !== false ) {
                    echo "Line #<b>{$num}</b> : " . htmlspecialchars($line) . "<br />\n";
                }
            }
        }
    }
    
    #   Usage:
    $what = array ( 'The horse is white', 'The flower is yellow', 'mixed' );
    search ( $what );
    

    【讨论】:

    • 嗨,罗密欧,效果很好 - 它返回了应有的行,但有一个例外。最后一个词“mixed”,无论在哪里,它都会搜索“mixed”。例如如果有一行:“mixedcolor”,那么它也会返回它。无论如何要“修剪”它,所以它只返回整个单词,或者如果有一个符号,比如“。”或者 ”;”背后?所以会返回“mixed”,但不会返回“mixedcolor”??
    • 恐怕你需要正则表达式。这是我最初想发布的内容,但我认为人们会开始抱怨它很慢,但它是最强大和最复杂的文本匹配方式。您可以使用preg_match('/\b' . preg_quote ( $needle, '/' ) . '\b/i', $line) 而不是stripos。这是正则表达式中单词边界的阅读内容,以及更多关于正则表达式的一般信息:regular-expressions.info/wordboundaries.html
    【解决方案2】:

    创建一个脚本,它将 grep 您的输入并将结果通过管道传输到您的 PHP 脚本中。

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2017-08-28
      • 2015-08-28
      • 2014-11-08
      • 1970-01-01
      相关资源
      最近更新 更多