【问题标题】:How do match list of given probable substring in a txt file with a specific string in php如何将txt文件中给定的可能子字符串列表与php中的特定字符串匹配
【发布时间】:2021-04-25 08:44:22
【问题描述】:

我有一个类似这样的 .txt 文件:

pay
pal

我想知道文件中的单词列表是否是给定字符串的子字符串(.ie $domain 在下面的代码中))

最好的方法是什么,我应该将其加载到内存中还是保持逐行检查?

注意:文件将来可能会增长,可能会有更多记录,并且每条记录都在新行中

任何代码 sn-p 都会帮助我。

这是我目前所拥有的,但它只输出一次,“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

【问题讨论】:

  • 您尝试过什么调试问题?为什么你用正则表达式标记这个问题,而代码不包含任何内容?

标签: php regex preg-match-all


【解决方案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 将文件读入内存(当然,如果您没有达到内存限制),然后在匹配任何 Unicode 换行符序列的\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!";
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2014-07-12
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多