PHP - удалить несколько строк из файла, используя файл исключения - PullRequest
0 голосов
/ 09 января 2020

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

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);

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

1 Ответ

1 голос
/ 09 января 2020

Если вы объединяете слова исключения с помощью ИЛИ |, то вы можете использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...