Как удалить строки, использующие PHP, которые не содержат обозначенную строку? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть следующий текстовый блок, содержащий имена в отдельной строке:

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

Существует несколько ответов, показывающих, как удалять строки, содержащие слово, но нет ответов, которые обеспечивают метод удаления всех тех, которые не содержат строку ключа.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете использовать регулярное выражение для сопоставления всех строк, которые do содержат Джонс, а затем объединить совпадения.

preg_match_all('/.*Jones.*/m', $text, $matches);
echo implode("\n", $matches[0]);
0 голосов
/ 22 февраля 2019

Я бы сделал это, разделив текстовый блок на массив с записью для каждой строки:

$lines = explode(PHP_EOL, $text);

Затем отфильтруйте строки, в которых нет нужного имени:

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

Затем вы можете присоединиться к массиву с желаемыми значениями

echo implode(PHP_EOL, $remaining);
...