如何解析href=和<;img src=值在<;一个类=“;块“;.


How to parse href= and <img src= values inside <a class="block"...?

我有一个名为$code的字符串。它包含如图所示的数据集。我正在尝试解析href=、channel=、src=的值。我试着使用赛前所有的比赛,但我没有得到任何数据!有人能告诉我解析上述数据的最佳方式是什么吗?提前谢谢。

$code的值:

        <div class="new"> <a class="block" target="_blank" href="http://somesite:8080/hls/mango1.m3u8?token=34523sedfsdfsdf&e=123456789&channel=mango1" data-toggle="modal" data-target="#mango1">
<div class="image-container"> <img src="images/mango1.png" class="img-responsive" > </div>
</a> </div>
        <div class="new"> <a class="block" target="_blank" href="http://somesite:8080/hls/mango2.m3u8?token=sfaesfraesgh452342&e=987654321&channel=mango2" data-toggle="modal" data-target="#mango2">
<div class="image-container"> <img src="images/mango2.png" class="img-responsive" > </div>
</a> </div>

php代码:

preg_match_all("#target='"_blank'" href='"([^<]+)'" data-toggl", $code, $foo2);
var_dump($foo2[1]); 
print_r($foo2[1]);

编辑:我试着使用DOM,得到了href的值,但如何得到src=的值?

$dom = new DOMDocument;
$dom->loadHTML($code);
$xpath = new DOMXPath($dom);
$nodeList = $xpath->query('//a[@class="block"]');
foreach ($nodeList as $node) {
    $href = $node->getAttribute('href');
    $imageurl = $node->getAttribute('src');
    echo "<br>".$href;
    echo "<br>".$imageurl;
}

我看到有几个人在评论中发布了使用DOM方法的消息,这很酷。不幸的是,我自己仍在学习如何使用DOM,所以我真的无法澄清您对此的问题。但我可以向您展示如何使用preg_match_all来解析数据,就像您在示例中尝试的那样。

我想出的REGEX是这样的:

's*<div class="new">.*?href="((?:.*?)channel=(.*?))".*?src="(.*?)".*?</a>'s*</div>

它的作用如下:

  • 's*-查找空白空间's,该空白空间可能出现任意次数的*
  • <div class="new">-找到准确的div
  • .*?-我在整个表达式中使用了几次,它只是指抓取任何字符.,任何次数的*,直到它与表达式?的下一部分匹配
  • href="-这是表达式的下一部分。我们实际上是在匹配字符串href="
  • ((?:.*?)-我们要做的第一件事是打开括号(,它将捕获我们的完整URL。紧接着,我们启动另一个组,该组将匹配"通道".*?之前的任何内容。我在这个组的前面添加了一个?:,告诉正则表达式引擎不要记住这个组中的内容。(我们会记住整个url……不需要这一部分。)
  • channel=-从字面上匹配字符串channel=
  • (.*?))"-我们将匹配短语channel=之后的任何内容,直到它达到引号"。我们把它放在括号里是因为我们想捕获这里的内容以便以后使用。我们还关闭了几步前打开的括号,以获取完整的url
  • .*?src="-通过src="查找任何内容,然后按字面意思匹配该短语
  • (.*?)"-捕获src="后面的值,直到结束引号"
  • .*?-通过下一个标签匹配之后的任何内容
  • </a>'s*</div>-匹配一个可以后跟空白字符's*的结束"a"标记</a>和一个结束"div"标记</div>

由此,捕获的组将如下:

  1. href
  2. 通道
  3. src

以下是可以玩的REGEX:

https://regex101.com/r/yX7qZ5/1

下面是一个使用PHP脚本中的表达式的工作演示:

http://ideone.com/YabeHW