preg_match_all模式 html 标记问题


preg_match_all pattern html tag issue

有4个不同的img标签

<img src="img1.jpg" alt="test" />
<img src="img2.jpg" height="21"/>
<img src="img3.jpg" border="1">
<img src="img4.jpg" >

我使用 PHP 代码

preg_match_all('#<img (.*?)([/>| />|>| >])#si',$this->Data,$img);  

但是这个PHP代码结果

Array
  (
[1] => Array
    (
        [0] => src="img1.jpg"
        [1] => src="img2.jpg"
        [2] => src="img3.jpg"
        [3] => src="img4.jpg"
    )  

我想结果:

    Array
  (
[1] => Array
    (
        [0] => src="img1.jpg" alt="test"
        [1] => src="img2.jpg" height="21"
        [2] => src="img3.jpg" border="1"
        [3] => src="img4.jpg"
    )  

你能帮我吗?

试试这个:

preg_match_all('#<img (.*?)'s?/?>#is', $this->Data, $img);  

's?可以选择匹配由可选斜杠/?解决的空格。

这基本上将从格式良好的 IMG 标记中获取任何内容。(假设属性的值没有任何>(。

要记住的是,正则表达式不是解析 HTML 的正确工具 - 但对于小 - 有限的 - 匹配非常有用。

这看起来像是给了你想要的;

$s = '<img src="img1.jpg" alt="test" />
      <img src="img2.jpg" height="21"/>
      <img src="img3.jpg" border="1">
      <img src="img4.jpg" >';
preg_match_all('~<img's+(.+?)(['s/>]|)>~i', $s, $m);
print_r($m);

外;

数组(    ...    [1] => 数组        (            [0] => src="img1.jpg" alt="test"            [1] => src="img2.jpg" height="21"            [2] => src="img3.jpg" border="1"            [3] => src="img4.jpg"        )
顺便说一句,据

我所知,你不需要使用s标志来preg_match_all,因为它的匹配*_all