如何使用 PHP 删除不包含指定字符串的行?

How do I delete lines using PHP that do NOT contain a designated string?

我有以下文本块,其中各行包含名称:

Sarah Jane Smith
Archie Jones
Micky Smith
Rose Tyler
Harriet Jones
Jack Harkness
John Smith
Martha Jones
Donna Noble

使用PHP,我想删除所有不包含琼斯的行,保留包含琼斯的行,如下:

Archie Jones
Harriet Jones
Martha Jones

有几个答案显示如何删除包含单词的行,但没有答案提供删除所有不包含关键字符串的行的方法。

我这样做的方法是将文本块拆分为一个数组,每行都有一个条目:

$lines = explode(PHP_EOL, $text);

然后过滤掉不包含你想要的名字的行:

$remaining = array_filter($lines, function($line) {
     return strpos($line, 'Jones') !== false;
});

然后你可以用你想要的值重新加入数组

echo implode(PHP_EOL, $remaining);

您可以使用正则表达式来匹配 包含琼斯的所有行,然后合并这些匹配项。

preg_match_all('/.*Jones.*/m', $text, $matches);
echo implode("\n", $matches[0]);