Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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 预匹配所有模式html标记问题_Php_Regex_Preg Match All - Fatal编程技术网

Php 预匹配所有模式html标记问题

Php 预匹配所有模式html标记问题,php,regex,preg-match-all,Php,Regex,Preg Match All,有4种不同的img标签 <img src="img1.jpg" alt="test" /> <img src="img2.jpg" height="21"/> <img src="img3.jpg" border="1"> <img src="img4.jpg" > 我想得出以下结论: Array ( [1] => Array ( [0] => src="img1.jpg" [1] =>

有4种不同的img标签

<img src="img1.jpg" alt="test" />
<img src="img2.jpg" height="21"/>
<img src="img3.jpg" border="1">
<img src="img4.jpg" >
我想得出以下结论:

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#u match_all(“##is”,$this->Data,$img);
\s?
可以选择匹配由可选斜杠
/?
解决的空白

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


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

preg_match_all('#<img (.*?)\s?/?>#is', $this->Data, $img);  
$s='1!'
';
preg_match_all('~src=“img2.jpg”height=“21”
[2] =>src=“img3.jpg”border=“1”
[3] =>src=“img4.jpg”
)

顺便说一句,据我所知,你不需要为
preg\u match\u all
使用
s
标志,因为它是匹配的
*\u all

试着去掉(.*)
|/>| si
后面的空格。我不明白最后一句话。
s
修饰符和
preg\u match\u all
方法之间没有冲突/重叠。我怀疑您正在考虑在Perl、JavaScript和其他一些风格中使用的
g
标志来指定全局匹配。PHP不支持
g
标志;它使用
preg\u match\u all
实现这一点。
preg_match_all('#<img (.*?)\s?/?>#is', $this->Data, $img);  
$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);
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" )