PHP 正在从文件中获取 URL 波纹管表达式

PHP Fetching URL bellow expression from file

我正在尝试从文件中获取 URL,但无法真正找到使其工作的方法。

我研究了正则表达式、explode 和 strpos,但找不到方法,我需要一些帮助。

这是我目前用于提取频道名称的一段代码;

foreach($fileContent as $line) {
    if((strpos($line, 'group-title') == true) && (strpos($line, 'tvg-name="#####') == false) 
        && ((strpos($line, '|NL|') == true) || (strpos($line, 'group-title="BE"') == true))) {
        $m3uChannelName = substr($line, strrpos($line, ',') + 1);
        $m3uChannelName = rtrim($m3uChannelName);
        $m3uChannelName = mysqli_real_escape_string($conn, $m3uChannelName);
        $sql_insertFileValue = "INSERT INTO epg_m3ufile (m3uChannelName) VALUES ('" . $m3uChannelName . "')";
        $resultM3U = mysqli_query($conn, $sql_insertFileValue);
        
        if (!empty($resultM3U)) {
            $affectedRowM3u ++;
        }else{
            $error_message = mysqli_error($conn) . "\n";
        }
        
    }
}

这是de文件中的部分内容;

#EXTM3U
#EXTINF:-1 tvg-id="" tvg-name="|NL| NPO 1 HD" tvg-logo="http://134.255.234.197/logos/npo1.png" group-title="NL| NEDERLAND",|NL| NPO 1 HD
http://localhost.dummy.proof:80/123456/654321/0123
#EXTINF:-1 tvg-id="" tvg-name="|NL| NPO 2 HD" tvg-logo="http://134.255.234.197/logos/npo2.png" group-title="NL| NEDERLAND",|NL| NPO 2 HD
http://localhost.dummy.proof:80/654321/123456/3210
#EXTINF:-1 tvg-id="" tvg-name="|NL| NPO 3 HD" tvg-logo="http://134.255.234.197/logos/npo3.png" group-title="NL| NEDERLAND",|NL| NPO 3 HD
http://localhost.dummy.proof:80/416352/524163/0231

我想做的是修改 foreach 以便我可以将 url 以及频道名导入我的数据库,但我似乎无法使其工作,因为 url 在 strposs 检查的下方。

我希望你们能帮助我/告诉我如何实现这一目标。

我试过这个解决方案,但无法正常工作PHP Preg match all m3u8 to parse into array

亲切的问候, 帕特里克

您可以使用具有 2 个捕获组的模式来获取 tvg-name 和最后一个 url:

的值
^#EXTINF:.*?\btvg-name="([^"]*)".*\R(https?:\/\/\S*)

模式匹配:

  • ^ 字符串开头
  • #EXTINF:字面匹配
  • .*? 匹配尽可能少的字符
  • \btvg-name=一个字边界,匹配tvg-name=
  • "([^"]*)"组1中捕获双引号
  • .*\R 匹配该行的其余部分和一个换行符
  • (https?:\/\/\S*) 捕获 g组 2
  • 中的最后一个 url

Regex demo

示例:

$re = '/^#EXTINF:.*?\btvg-name="([^"]*)".*\R(https?:\/\/\S*)/m';
$str = '#EXTM3U
#EXTINF:-1 tvg-id="" tvg-name="|NL| NPO 1 HD" tvg-logo="http://134.255.234.197/logos/npo1.png" group-title="NL| NEDERLAND",|NL| NPO 1 HD
http://localhost.dummy.proof:80/123456/654321/0123
#EXTINF:-1 tvg-id="" tvg-name="|NL| NPO 2 HD" tvg-logo="http://134.255.234.197/logos/npo2.png" group-title="NL| NEDERLAND",|NL| NPO 2 HD
http://localhost.dummy.proof:80/654321/123456/3210
#EXTINF:-1 tvg-id="" tvg-name="|NL| NPO 3 HD" tvg-logo="http://134.255.234.197/logos/npo3.png" group-title="NL| NEDERLAND",|NL| NPO 3 HD
http://localhost.dummy.proof:80/416352/524163/0231';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
foreach($matches as $m) {
    echo $m[1] . PHP_EOL . $m[2] . PHP_EOL;
}

输出

|NL| NPO 1 HD
http://localhost.dummy.proof:80/123456/654321/0123
|NL| NPO 2 HD
http://localhost.dummy.proof:80/654321/123456/3210
|NL| NPO 3 HD
http://localhost.dummy.proof:80/416352/524163/0231