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
示例:
$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
我正在尝试从文件中获取 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
示例:
$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