我有字符串:
"<p>111111111111</p><p><a href="hhz://user:28902"><img src="http://test.img.hhz.com/Op-imageShow/d84c520hs0bv00000odheqk?iv=1" title="sample.jpeg" alt="sample.jpeg"/></a></p><p><br/></p><p>dfad</p><p><br/></p><p><a href="hhz://photo:0000csh000000jts"><img src="http://test.img.hhz.com/Op-imageShow/3d64330b80bk00000odhewz?iv=1" title="20160914144811.png" alt="20160914144811.png"/></a></p><p><br/></p><p><br/></p><p><img src="http://test.img.hhz.com/App-imageShow/o_nphone/0b5/e4eee20ku0q200000ocuvk2?iv=1" data-photo-id="00003w10000009ae" style="width:300px;height:auto;"/></p><p><br/></p><p><img src="http://test.img.hhz.com/Op-imageShow/7b75220ku08c00000odhff6?iv=1" title="bee7d20rs0b400000oddx35.jpg" alt="bee7d20rs0b400000oddx35.jpg"/></p><p><img src="http://test.img.hhz.com/App-imageShow/o_nphone/e60/8c0c720ku0ku00000oct56s?iv=1" data-photo-id="00003w00000009ae" style="width:300px;height:auto;"/><img src="http://test.img.hhz.com/App-imageShow/o_nphone/f81/19aa920dw0dw00000oa8iht?iv=1" data-photo-id="00001i40000009bk" style="width:300px;height:auto;"/></p>"
我想只匹配:
<img src="http://test.img.hhz.com/App-imageShow/o_nphone/e60/8c0c720ku0ku00000oct56s?iv=1" data-photo-id="00003w00000009ae" style="width:300px;height:auto;"/>
<img src="http://test.img.hhz.com/App-imageShow/o_nphone/f81/19aa920dw0dw00000oa8iht?iv=1" data-photo-id="00001i40000009bk" style="width:300px;height:auto;"/>
<img src="http://test.img.hhz.com/App-imageShow/o_nphone/0b5/e4eee20ku0q200000ocuvk2?iv=1" data-photo-id="00003w10000009ae" style="width:300px;height:auto;"/>
目前我使用匹配:
$pattern = '/\<img\s+src=\"(\w.+)\"\s+data-photo-id=\"(\w{16})\".+\>/U';
实际上,我有一个长字符串,它是html文本。有些图片标签有data-photo-id属性,有些则没有,但我想匹配包含img data-photo-id标签。问题是我无法匹配常规。请有人帮助我。
答案 0 :(得分:0)
改为使用解析器。你所拥有的并不是一个独立的字符串,而是一个更大的HTML
构造的一部分。
<?php
$data = <<<DATA
<div>
<p><img src="http://test.img.hhz.com/Op-imageShow/7b75220ku08c00000odhff6?iv=1" title="bee7d20rs0b400000oddx35.jpg" alt="bee7d20rs0b400000oddx35.jpg"/></p>
<p><img src="http://test.img.hhz.com/App-imageShow/o_nphone/e60/8c0c720ku0ku00000oct56s?iv=1" data-photo-id="00003w00000009ae" style="width:300px;height:auto;"/></p>
</div>
DATA;
$dom = new DOMDocument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
try {
$img = $xpath->query("//img[@data-photo-id]/@src")->item(0)->nodeValue;
echo $img;
} catch (Exception $e) {
echo "Something went wrong.";
}
?>
这将回显http://test.img.hhz.com/App-imageShow/o_nphone/e60/8c0c720ku0ku00000oct56s?iv=1
,根据需要调整查询()。
答案 1 :(得分:0)
试试:
'/\<img\s+(src=\"\w[^\>]+\")[^\>]*(data-photo-id=\"\w{16}\")[^\>]*\/\>/U'
验证:https://regex101.com/r/eS9oU1/2
编辑:它跟随你的下一次修改