0

有 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"

    )  

你能帮我吗?

4

2 回答 2

1

试试这个:

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

\s?可选地匹配由可选斜杠 sollowed 的空格/?

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

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

于 2013-02-17T13:34:25.387 回答
0

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

$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="测试"
            [1] => src="img2.jpg" height="21"
            [2] => src="img3.jpg" 边框="1"
            [3] => src="img4.jpg"
        )

顺便说一句,据我所知,你不需要使用sflag for preg_match_all,因为它是 matching *_all

于 2013-02-17T13:53:15.723 回答