管道为什么不工作?

时间:2016-12-28 05:03:57

标签: php regex preg-match-all

我很难过为什么管子不起作用。

/(?:<img.*?src=[\'"](.*?)[\'"].*?>)|(http(?:[^\s]*)\.(?:jpg|jpeg|gif|png))/

以下是代码的完整代码:http://pastebin.com/J2y8jbsg

例如:

之类的链接
http://guardianlv.com/wp-content/uploads/2014/03/Robots-The-Possibilities-of-Artificial-Intelligence.jpg
如果第二个正则表达式模式是单独的,将捕获

(http(?:[^\s]*)\.(?:jpg|jpeg|gif|png))

但是当我把它添加到另一个时,如上面最初所示和在pastebin中,作为管道,我得到的只是一个空数组:

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

有人可以解释一下吗?而且解决方案也会有所帮助:)谢谢。

1 个答案:

答案 0 :(得分:1)

在你的第一部分:

<img.*?src=[\'"](.*?)[\'"].*?>
                 ^  

这是第一个捕获组。所以:

(http(?:[^\s]*)\.(?:jpg|jpeg|gif|png)

是你的第二个捕获组。所以:

foreach ( $matches[1] as $url ) {

不正确。您可以使用:

foreach ( $matches[2] as $url ) {

foreach ( $matches[0] as $url ) {

完整比赛。

演示:https://eval.in/705305

Regex101演示:https://regex101.com/r/KXjmo3/1