使用正则表达式从html源代码中获取文本

时间:2016-10-27 20:36:11

标签: php html regex

我有一个PHP代码,用于在变量中存储网站的html源代码,我想从该源代码中获取两个链接。 第一个链接位于元标记密钥内容中:

jw.load([{ file: 'http://vrbx105.xxx.xx/U7yvQnLiA_m5mhE9MUHf3w/1477628604/vl107aeb2d7db53f91fc6ad2e76fe11e49.mp4', provider: 'http' }]);

第二次

http://img.xxx.xx/vid/xxx/b7950d611f934f0eef95c1cd010348e3.jpg
http://vrbx105.xxx.xx/U7yvQnLiA_m5mhE9MUHf3w/1477628604/vl107aeb2d7db53f91fc6ad2e76fe11e49.mp4

我只需要获得这两个链接,每次重新加载页面时都会更改:

{{1}}

2 个答案:

答案 0 :(得分:0)

如果你坚持使用正则表达式,那么这是第一个链接:https://regex101.com/r/CHpfDY/1

这是第二个:https://regex101.com/r/VVF0Gf/1

答案 1 :(得分:0)

除非你有PHP JavaScript parser方便,否则你至少可以摆脱HTML搜索的正则表达式。像这样的东西应该有用,虽然没有URL就很难测试...

<?php
$dom=new DomDocument();
$dom->loadHTMLFile("http://example.com/example.html");
$xpath = new DomXpath($dom);

$metanode = $xpath->query("//meta[@property='og:image']/@content");
if ($metanode->length) {
    $url1 = $metanode[0]->value;
}

$scriptnode = $xpath->query("//script");
foreach ($scriptnode as $script) {
    $array = explode("\n", $script->nodeValue);
    foreach ($array as $line) {
        if (preg_match("/jw.load... file: '(.*?)'/", $line, $matches)) {
            $url2 = $matches[1];
            break(2);
        }
    }
}

echo $url1;
echo $url2;