我正在尝试从给定的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个字符的限制,但不幸的是,这不起作用。
任何能指出我做错了什么的人。
感谢
注意:我正在尝试获取此页面的URL此链接
像这样简单的东西
<a.*?>.{30,}?</a>
不够吗?上面的内容为30个字符或更多的锚标签。它不会尝试验证链接的href属性或任何其他属性。如果需要,可以对其进行更改。
这被翻译成preg_match_all
作为(感谢@php_nub_qq)
preg_match_all("#<a.*?>.{30,}?</a>#", $match[0],$posts);
您链接的URL在URL字符串中包含字母、数字和非字母数字字符。由于您对源代码几乎没有控制权,因此最好像上面那样概括这种情况,而不是尝试按每个字符列出白名单。
试试这个:
preg_match_all("/<a href='"(.*)'"[^>]*>([a-z'd's]{30,})<''/[a-z]+>/si", $match[0],$posts);
由于您有i
不区分大小写的修饰符,所以类中不需要同时使用a-z
和A-Z
。如果您只是设置内容的最小长度,则不需要指定最大999
;CCD_ 7表示30或更多。