#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!";
}
}
}