2

我正在尝试从给定的 HTML 中获取所有锚标记,其中内容长度超过 30 个字符,即如果我有这个 HTML

<td><a hreh="anything">Content is more then 30 chars........</a>
<a hreh="anything">another link</a>
</td>

我为此写了这个正则表达式preg_match_all("/<a href=\"(.*)\"[^>]*>([a-zA-Z0-9]{30,999})<\\/[a-zA-Z]+>/si", $match[0],$posts);

其中 30 将最小 30 字符的限制设置为锚标记内容,但不幸的是,这不起作用。

任何可以指出我做错了什么的人。

谢谢

注意:我正在尝试获取此页面 URL 的 此链接

4

2 回答 2

2

会简单的事情

<a.*?>.{30,}?</a>

不够?以上查找锚标记,其内容为 30 个或更多字符。它不会尝试验证链接的 href 属性或任何其他属性。如果需要,可以对其进行更改。

这被翻译成preg_match_all(感谢@php_nub_qq)

preg_match_all("#<a.*?>.{30,}?</a>#", $match[0],$posts);

您链接的 URL 在 url 字符串中包含字母、数字和非字母数字字符。由于您对源几乎没有控制权,因此最好像上面一样概括这种情况,而不是尝试基于每个字符进行白名单。

于 2013-08-30T11:23:48.293 回答
0

尝试这个:

preg_match_all("/<a href=\"(.*)\"[^>]*>([a-z\d\s]{30,})<\\/[a-z]+>/si", $match[0],$posts);

由于您有不区分大小写的修饰符,因此您的课程中i不需要两者。如果您只是设置内容的最小长度,则不需要指定最大值; 表示 30 或更多。a-zA-Z999{30,}

于 2013-08-30T11:21:41.650 回答