我试图理解php中的preg_match_all。 我和朋友经营一个小网站,与几个朋友一起玩,主要练习编码,我们在前面添加了一个部分,其中包含剥离任何图像来源的代码:
$html = file_get_contents('http://www.anyrandomwebsite.com');
preg_match_all('/<img[^>]+>/i',$html, $result);
我们刚刚在网上找到它,并且对它没有多大意义,但我知道它在页面上找到任何图像标记实例并将它们放入数组中。
现在,我正在尝试创建一个代码,在源代码中搜索页面上的任何链接(所以任何以“http”开头的内容),最好只选择以特定扩展名结尾的内容(即.net或.zip) )
但是,我无法弄清楚如何编写模式。我试过学习正则表达式,但根据我朋友告诉我的情况,用于查找图像标签的代码不符合正常规则,他们也不完全理解。
基本上,我正在寻找有人请写一个可以在页面上找到链接的preg_match_all,然后请向我解释为什么它有效,并解释上述代码是如何工作的(最好是在字符中逐个字符)模式部分)
非常感谢任何回应此事的人!
答案 0 :(得分:1)
解释你的正则表达式:
/ # Starting regex delimiter
<img # Match <img
[^>]+ # Match one or more characters that aren't a >
> # Match a >
/ # Ending regex delimiter
i # Case-insensitive option
它是如何工作的?
想象一下img
标签的样子。它以<img
开头,以>
结尾。因此,一旦我们确定了<img
标记,我们就需要将所有内容匹配到最近的>
。
这意味着我们需要匹配尽可能多的字符,只要它们不是>
。这正是[^>]+
所做的。由于必须至少有其中一个字符(<img>
不合法),我们使用+
代替“零或更多”*
。
您可能会在此处看到问题:如果标签 在某处包含>
,该怎么办? G。在一个属性?你有一个原因就是使用正则表达式解析HTML充满了危险。