如何定期最小匹配

时间:2016-09-14 08:43:49

标签: php regex preg-match

我有字符串:

"<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标签。问题是我无法匹配常规。请有人帮助我。

2 个答案:

答案 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

编辑:它跟随你的下一次修改

相关问题