我正在尝试从给定的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个字符的限制用于锚定标记内容,但不幸的是,这不起作用。
那些可以指出我做错了什么的人。
谢谢
注意:我正在尝试获取此页面的网址 This Link
答案 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-z
和A-Z
。如果您只是设置内容的最小长度,则无需指定最大值999
; {30,}
表示30或更多。