PHP正则表达式条件从HTML锚标记获取内容和链接

时间:2013-08-30 11:13:54

标签: php regex

我正在尝试从给定的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);

撰写此RegEx

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

那些可以指出我做错了什么的人。

谢谢

注意:我正在尝试获取此页面的网址 This Link

2 个答案:

答案 0 :(得分:2)

将事情简单化为

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

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

这被转换为preg_match_all as(感谢@php_nub_qq)

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

您链接的网址包含网址字符串中的字母,数字和非字母数字字符。由于您几乎无法控制源,因此最好像上面一样概括案例而不是尝试按字符列出白名单。

答案 1 :(得分:0)

试试这个:

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

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