Как сопоставить список заданной вероятной подстроки в текстовом файле с определенной строкой в php

#php #regex #preg-match-all

#php #регулярное выражение #preg-match-all

Вопрос:

У меня есть файл .txt примерно так:

 pay
pal
 

Я хочу выяснить, является ли список слов в файлах вложенной строкой заданной строки (.ie $domain в коде ниже))

Какой наилучший подход, должен ли я загружать его в память или проверять строку за строкой на лету?

Примечание: в будущем файл может увеличиться с потенциально большим количеством записей, и каждая запись будет в новой строке

Мне поможет любой фрагмент кода.

Вот что у меня есть до сих пор, но оно просто выводится один раз: «SubstringFound! вместо дважды »

 function checklist() 
{
$domain='abpaypal123.com';
$handle = fopen("C:/test_project/black_list.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        // process the line read.
print_r($line);
if(strpos($domain, $line) !== false){
    echo "Substring Found!";
}
    }

    fclose($handle);
} 
}
 

Спасибо

php

Комментарии:

1. Что вы пытались отладить проблему? Почему вы пометили этот вопрос регулярным выражением, в то время как код его не содержит?

Ответ №1:

Ваш текущий код выводится SubstringFound! только один раз, так как $line содержит новую строку после pay, а strstr вернет false для первой строки.

Вы можете решить это, удалив новую строку из $line

 function checklist()
{
    $domain='abpaypal123.com';
    $handle = fopen("C:/test_project/black_list.txt", "r");
    if ($handle) {
        while (($line = fgets($handle)) !== false) {
            if(strpos($domain, rtrim($line)) !== false){
                echo "Substring Found!";
            }
        }

        fclose($handle);
    }
}
 

Вы также можете прочитать файл в память (если, конечно, вы не достигли предела памяти), используя, например, file_get_contents, а затем разделить R , который соответствует любой последовательности перевода строки в Юникоде.

 function checklist()
{
    $domain='abpaypal123.com';
    $str = file_get_contents("C:/test_project/black_list.txt");
    foreach(preg_split("/R/", $str) as $line) {
        if(strpos($domain, $line) !== false){
            echo "Substring Found!";
        }
    }
}