【问题标题】:PHP - Remove multiple lines from a file using a exception filePHP - 使用异常文件从文件中删除多行
【发布时间】:2020-01-09 16:02:11
【问题描述】:

我有一个文本文件,其中包含:

text1 bla bla
text2 bla2 bla2
text3 bla3 bla4
text4 bla4 bla7
text5 bla8 bla7
text6 bla9 blu1

和另一个文件,其中包含:

bla7
bla3
text1

我想创建一个 PHP 脚本,它基于第一个文件创建一个新文件,只包括不包含第二个文件中的文本的行。使用上面的示例,我希望得到以下结果:

text2 bla2 bla2
text6 bla9 blu1

我阅读了其他帖子并尝试使用下面的代码,但它只删除了一个单词。

$lines  = file('test.txt');
$search = 'text2';

$result = '';
foreach($lines as $line) {
    if(stripos($line, $search) === false) {
        $result .= $line;
    }
}
file_put_contents('cleanfile.txt', $result);

任何关于我做错了什么以及如何使代码适用于多个单词的建议将不胜感激。

【问题讨论】:

  • 当您点击创建此帖子时,按钮显示“”。但“我想要”或“我需要”不是问题,也不是问题陈述。我们将帮助您修复错误或回答有关您的代码的特定问题,而不仅仅是完全为您完成工作。你做了什么研究?你试过什么代码?你面临什么问题?请阅读stackoverflow.com/help/how-to-ask 以获取有关如何提出有用问题的进一步指导。谢谢。 (P.S. 考虑创建一个单词数组并循环遍历它们,在每一行中依次搜索每个单词......)
  • 读入第二个文件并在现有循环中循环。

标签: php html file


【解决方案1】:

如果你用 OR | 加入排除词,那么你可以用 grep 查找包含这些词的行并将它们排除:

$result = preg_grep('/\b' . implode('|', file('exclusions.txt')) . '\b/i',
                    file('test.txt'),
                    PREG_GREP_INVERT);

file_put_contents('cleanfile.txt', $result);

\b 确保存在单词边界,例如,bla 与 bla2 不匹配。 i 修饰符使其不区分大小写,因为您使用了 stripos。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多