如何 preg_match 这个 text/javascript 在 html 加载

How to preg_match this text/javascript in html loaded

当我查看 html 页面的源代码时,我在 text/javascript 标签中看到了这个:

playlist = [{
    title: "",
    thumnail: "//example.com/folder/c9cc7f89fe5c168551bca2111d479a3e_1515576875.jpg",
    source: "https://examp.com/360/HX62.mp4?authen=exp=1517246689~acl=/82vL3DDTye4/*~hmac=977cefd9de63a29fde25c856e0fdfd2f",
    sourceLevel: [
        {
            source: "https://examp.com/360/HX62.mp4?authen=exp=1517246689~acl=/82vL3DDTye4/*~hmac=977cefd9de63a29fde25c856e0fdfd2f",
            label: '360p'
        },
        {
            source: "https://examp.com/480/HX62.mp4?authen=exp=1517246689~acl=/SuCa7NnGEhM/*~hmac=80bc89a07b1f4ed87d584a89c623e946",
            label: '480p'
        },
        {
            source: "https://examp.com/720/HX62.mp4?authen=exp=1517246689~acl=/SuCa7NnGEhM/*~hmac=80bc89a07b1f4ed87d584a89c623e946",
            label: '720p'
        },
    ],
}];

我想获取源和标签中的字符串,然后我写了这段代码:

$page = curl ('https://example.com/video-details.html')
preg_match ('#sourceLevel:[{source: "(.*?)",label: \'360p\'},{source: "(.*?)",label: \'480p\'},{source: "(.*?)",label: \'720\'}#', $page, $source);
$data360 = $source[1];
$data480 = $source[2];
$data720 = $source[3];
echo $data360. '<br/>' .$data480. '<br/>' .$data720. '<br/>';

我知道它在某些地方可能是错误的,因为我是 PHP 的新手。我希望有人能帮助我更正我的代码。非常感谢!

您需要:

  • 转义正则表达式中的大括号和方括号,因为它们在正则表达式中具有特殊含义,
  • 转义您选择单引号作为分隔符的字符串文字中的单引号(您在我写完这篇文章后更正了)。
  • 提供可以出现在页面字符串中多个字符之间(例如 { 前后)的白色 space。

我还建议将每个 source/labels 作为单独的匹配项进行匹配,这样当不完全是三个时,您仍然可以全部匹配。

这是建议的代码:

preg_match_all('~\{\s*source\s*:\s*"(.*?)"\s*,\s*label\s*:\s*\'(.*?)\'\s*\}~', 
               $page, $sources);

$sources = array_combine($sources[2], $sources[1]);

这将提供 $sources 变量作为关联数组,由标签键入:

[
    "360p" => "https://examp.com/360/HX62.mp4?authen=exp=1517246689~acl=/82vL3DDTye4/*~hmac=977cefd9de63a29fde25c856e0fdfd2f",
    "480p" => "https://examp.com/480/HX62.mp4?authen=exp=1517246689~acl=/SuCa7NnGEhM/*~hmac=80bc89a07b1f4ed87d584a89c623e946",
    "720p" => "https://examp.com/720/HX62.mp4?authen=exp=1517246689~acl=/SuCa7NnGEhM/*~hmac=80bc89a07b1f4ed87d584a89c623e946"
]