我想grep div class =" container"中的模式。这是我的 代码
<?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;
?>
开头
答案 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');
}
}
如果任何数据更改将会失败的正则表达式方法:
^(.*)<div class="container" src="(.*?)".*<\/div>
演示:https://regex101.com/r/5GBHbc/1/
正则表达式的问题:
container:
不存在:">
也不存在src =
也不存在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=