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


PHP regex conditional get content and link from HTML anchor tag

我正在尝试从给定的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-zA-Z。如果您只是设置内容的最小长度,则不需要指定最大999;CCD_ 7表示30或更多。