HTML代码
<img src="http://website/image/ngshjk.jpeg" onload="img_onload(this);" onerror="img_onerror(this);" data-pid="dynamicvalue" data-imagesize="ppew" data-error-url="http://img.comb/6/z2default.jpg" class="small_image imageZoom " alt="image" title="" id="visible-image-small" rel="dynamicvalue" data-zoom-src="http://img.comb/6/z21347.jpeg" style="display: inline;">
PHP代码
preg_match_all('/<img(.*) onload="(.*)" \/s',$con,$val);
此页面已经有很多img标签。所以我尝试使用img标签内的一些属性来获取特定图像的src。我在preg_match_all中无法正确。请纠正我在上面的img标签中获取源代码。
答案 0 :(得分:3)
您可能最好使用懒惰的.*?
而不是贪婪的.*
。
preg_match_all('/<img(.*?)\sonload="([^"]*)"/s',$con,$val);
然后将第二个.*
更改为[^"]*
。
.*?
匹配最少数量的字符,直到下一个匹配(在本例中为onload...
)和[^"]*
匹配引号之间的任何非引号字符。
答案 1 :(得分:0)
此表达式将:
data-imagesize="ppew"
data-pid="ABCDEFGHIJ"
src
属性值
<img\b(?=\s) # capture the open tag
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sdata-imagesize="ppew") # validate data-imagesize exists with a specific value
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sdata-pid="ABCDEFGHIJ") # validate data-pid exists with a specific value
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\ssrc=['"]([^"]*)['"]?) # capture the src attribute value
(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?\/?> # get the entire tag
直播示例:http://www.rubular.com/r/PBJ50cax7L
单行正则表达式:<img\b(?=\s)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sdata-imagesize="ppew")(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sdata-pid="ABCDEFGHIJ")(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\ssrc=['"]([^"]*)['"]?)(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?\/?>
示例文字
注意第一行有一些可能存在问题的条件
<img onmouseover=' data-imagesize="ppew" ; data-pid="ABCDEFGHIJ" ; funSwap(data-imagesize, data-pid) ; ' src="http://website/NotTheDroidYourLookingFor.jpeg" onload="img_onload(this);" onerror="img_onerror(this);" data-pid="jihgfedcba" data-imagesize="ppew" />
<img src="http://website/someurl.jpeg" onload="img_onload(this);" onerror="img_onerror(this);" data-pid="ABCDEFGHIJ" data-imagesize="ppew" />
捕获论坛
[0] = <img src="http://website/someurl.jpeg" onload="img_onload(this);" onerror="img_onerror(this);" data-pid="ABCDEFGHIJ" data-imagesize="ppew" />
[1] = http://website/someurl.jpeg
答案 2 :(得分:0)
要获取页面上的所有图像标记,使用HTML解析工具可能会更容易:
// load your html string
$dom = new DOMDocument();
$dom->loadHTML($your_html_here);
// find all the img tags
$imgs = $dom->getElementsByTagName('img');
// cycle through all image tags
foreach($imgs as $img) {
$src = $img->getAttribute("src");
// do something
}