-3

我试图理解 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 可以在页面上找到链接,然后请向我解释它为什么起作用,并解释上面的代码是如何工作的(最好是在模式部分逐个字符)

非常感谢任何对此作出回应的人!

4

1 回答 1

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>不合法),我们使用 a+而不是 "zero or more" *

您可能会在这里看到一个问题:如果标签确实包含>某处(例如,在属性中)怎么办?这就是为什么使用正则表达式解析 HTML 充满危险的原因之一。

于 2012-11-04T06:42:04.500 回答