Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用preg_match_all image source和用户定义的标记_Php_Regex_Preg Match All - Fatal编程技术网

Php 使用preg_match_all image source和用户定义的标记

Php 使用preg_match_all image source和用户定义的标记,php,regex,preg-match-all,Php,Regex,Preg Match All,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" ti

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);

preg\u match\u all('/您最好使用懒惰的
*?
而不是贪婪的
*

preg_match_all('/<img(.*?)\sonload="([^"]*)"/s',$con,$val);
preg_match_all('/Description
此表达式将:

  • 验证图像标记的属性/值是否为
    data imagesize=“ppew”
  • 验证图像标记的属性/值是否为
    data pid=“ABCDEFGHIJ”
  • 捕获
    src
    属性值
  • 避免潜在的困难问题

获取整个标记

例子 实例:

单行正则表达式:
=]|='[^']*'.[^']*'.[^']*'.[^'\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
[0]=
[1] = http://website/someurl.jpeg

要获取页面上的所有图像标记,使用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
}

@MohamedFawaskhan是否也要获取src属性?如果是这样,您可以使用
。否则,恐怕我不明白你想用正则表达式做什么。你最好找一个HTML解析器,而不是正则表达式,因为HTML可能非常不稳定。这个所需的图像标记有什么特别之处,与所有其他标记有何不同?这就是我无法做到的原因。我确信其他img标记没有onload=“img_onload(this);”是否最好简单地将所有图像标记作为列表查找,然后在代码的后面,简单地查看它们以查找有趣的标记?我在创建表达式方面很弱,但我能理解您的代码。我编辑了我的问题,请看一下。
// 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
}