Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 为什么这个正则表达式不';不行?_Php_Regex - Fatal编程技术网

Php 为什么这个正则表达式不';不行?

Php 为什么这个正则表达式不';不行?,php,regex,Php,Regex,我有一个正则表达式: preg_match_all("/<\s*?img\s[^>]*?src=([\"']??)([^\"' >]*?)\1[^>]*?>/si", $content, $m); preg\u match\u all(“/]*?src=([\'”)([^\'>]*?)\1[^>]*?>/si“,$content,$m); 其思想是在一段HTML中查找所有图像链接。鉴于这一内容: <p> <img alt="" src=

我有一个正则表达式:

preg_match_all("/<\s*?img\s[^>]*?src=([\"']??)([^\"' >]*?)\1[^>]*?>/si", $content, $m);
preg\u match\u all(“/]*?src=([\'”)([^\'>]*?)\1[^>]*?>/si“,$content,$m);
其思想是在一段HTML中查找所有图像链接。鉴于这一内容:

<p>
    <img alt="" src="/emailimg/interdigital_old.jpg" style="width: 377px; height: 245px; " />Some text here.</p><a href="site.html">test</a>

这里有一些文字

在执行regex之后,$m是一个包含3个空数组的数组,但是如果我用它测试它,结果是:

Array
(
    [0] => Array
        (
            [0] => <img alt="" src="/emailimg/interdigital_old.jpg" style="width: 377px; height: 245px; " />
        )

    [1] => Array
        (
            [0] => "
        )

    [2] => Array
        (
            [0] => /emailimg/interdigital_old.jpg
        )

)
数组
(
[0]=>阵列
(
[0] => 
)
[1] =>阵列
(
[0] => "
)
[2] =>阵列
(
[0]=>/emailimg/interdigital_old.jpg
)
)
问题是什么?是配置问题吗?

正确的方法:

…当转换为带有正确转义引号的PHP字符串声明时,如下所示:

$expr = '/<\s*img\s[^>]*src\s*=\s*(["\']?)([^"\' >]*?)\1[^>]*>/i';
$expr='/]*src\s*=\s*([“\']”?)([^“\'>]*?)\1[^>]*>/i';
…顺便说一下


现在,我仍然坚持认为,即使考虑到额外的代码,DOM方法也会更好,因为它可能会捕获我的regex skillz已经忘记的边缘情况。尽管不可否认,regex似乎确实是。

强制性链接:-但非常严肃地说,对于这项工作肯定会更好。同意,在DOM上使用XPath会更好实现这一点的首选方法。同意,但这些是小的html片段,不是一个完整的页面,使用正则表达式很容易解析,不需要完整的页面;-)当我这么说时,我指的是这些非常简单的html片段,由工具生成,可以使用正则表达式用一行解析,但是需要(正如你在回答中所示)4-5行“相同”(我知道在一般情况下不一样,但在我的具体情况下是一样的)。这并不能回答问题,但无论如何,这是最好的答案,所以我接受它完美的,现在我明白了发生了什么,谢谢。([\“'”??)是尝试获得单引号、双引号和无引号的所有可能性,但还有一个额外的问号(我在做一些测试,以找出问题所在)
/<\s*img\s[^>]*src\s*=\s*(["']?)([^"' >]*?)\1[^>]*>/i
$expr = '/<\s*img\s[^>]*src\s*=\s*(["\']?)([^"\' >]*?)\1[^>]*>/i';