php grep <div class =“container”src =“https:// ..”>

时间:2017-09-28 11:32:29

标签: php html regex

我想grep div class =&#34; container&#34;中的模式。这是我的 代码

<?php
$text = ' <div class="container" src="https://cdn.ibctamil.com/ibctamil/ibc_tamil_tv/playlist.m3u8?zecaststarttime=1506455875&zecastendtime=1506479275&zecasthash=z8GSRoz4YawDqICWGTnepikvYKOgUtkMe-JdSOrwaWc=" data-mediatype="video" data-autoplay="0" data-showartwork="0" data-theme="light" data-od="0"></div>';

$text = preg_replace('/^(.*)(<div class="container:"> src = "".*)(<\/div>)$/', '$2', $text);


echo $text;
?>

//在输出中我希望网址以https://cdn.ibctamil.com/ibctamil/ibc_tamil_tv/playlist.m3u8?zecaststarttime=1506455875&zecastendtime=1506479275&zecasthash=z8GSRoz4YawDqICWGTnepikvYKOgUtkMe-JdSOrwaWc=

开头

2 个答案:

答案 0 :(得分:0)

你不是grep这里的任何东西,你正在使用正则表达式处理你不应该做的HTML。你的正则表达式也有多个拼写错误,这就是它无法正常工作的原因。

以下是你应该如何处理这个问题:

$html = '<div class="container" src="https://cdn.ibctamil.com/ibctamil/ibc_tamil_tv/playlist.m3u8?zecaststarttime=1506455875&zecastendtime=1506479275&zecasthash=z8GSRoz4YawDqICWGTnepikvYKOgUtkMe-JdSOrwaWc=" data-mediatype="video" data-autoplay="0" data-showartwork="0" data-theme="light" data-od="0"></div>';
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
    if($div->getAttribute('class') == 'container') {
        echo $div->getAttribute('src');
    }
}

演示:https://3v4l.org/IniNf

如果任何数据更改将会失败的正则表达式方法:

^(.*)<div class="container" src="(.*?)".*<\/div>

演示:https://regex101.com/r/5GBHbc/1/

正则表达式的问题:

  1. container:不存在
  2. :">也不存在
  3. src =也不存在
  4. 您的捕获组太大
  5. 您正在寻找带有src的空""属性,.*需要在其中。 [^"]+"会更好地工作,因为它会占用所有内容,直到下一个双引号

答案 1 :(得分:0)

  <?php

$text = "<div class='container' src='https://cdn.ibctamil.com/ibctamil/ibc_tamil_tv/playlist.m3u8?zecaststarttime=1506455875&zecastendtime=1506479275&zecasthash=z8GSRoz4YawDqICWGTnepikvYKOgUtkMe-JdSOrwaWc=' data-mediatype='video' data-autoplay='0' data-showartwork='0' data-theme='light' data-od='0'></div>";


preg_match_all("@src='([^']+)'@",$text, $result);


$result[0][0] = substr($result[0][0], 4);


$NewResult=implode(' ',$result[0]);
$NewResult=trim($NewResult,"''");
echo($NewResult);

,输出只是src:

https://cdn.ibctamil.com/ibctamil/ibc_tamil_tv/playlist.m3u8?zecaststarttime=1506455875&zecastendtime=1506479275&zecasthash=z8GSRoz4YawDqICWGTnepikvYKOgUtkMe-JdSOrwaWc=