这个正则表达式的目的是找出一个网页是否包含指向给定域的反向链接,并且所有这些都必须在标记上有一个rel=“no追随者”属性。如果遇到这种情况,则为True,否则为False,如果存在,则不包含rel=“no追随者”。
在任何网页上,我想检查是否存在这样的内容:
<a ... href="http://www.mysite.com/xyz...." ... >,,在所有这样的链接中都不能有"rel=nofollow“属性。
考虑到这个域,www.mysite.com是已知的,我想检查它,即使在注释中,或者在页面中的任何地方。
我可以超越我自己,但我无法想到使用单一模式的优化方法。
一种未优化的方法,我可以这样做,以找到所有出现的标签与href="mysite.com“,并看看是否即使单个匹配不包含一个rel=nofollow。
是否有任何智能和单行方式来创建正则表达式模式?
PS:不想解析DOM,因为由于解析错误而错过反向链接是有风险的,而Google解析器可能会有所不同。我想要人类的注意力,只有那些网页的链接,从谁可能导致从搜索引擎的反向链接惩罚。如果评论中的链接被标记为反向链接,并带走了一些人的注意力,那就没问题了。但是无论如何,色情网站的链接都必须被捕获。最后,我想准备垃圾邮件链接列表,我可以在谷歌网站管理员的否认工具提交。这个练习必须为每个网站的每个站长在一个月左右的一次。我负担不起这种付费服务: www.linkdetox.com
发布于 2014-03-19 09:46:13
通常,用regex解析HTML是个坏主意(下面是著名原因)。由于regex无法完全解析HTML,您可能会遇到奇怪的bug。
但是,如果您的输入是“安全的”(即不更改很多,或者您已经为奇怪的错误做好了准备),并且回答您的问题,当您在a标记上时,您可以使用类似的东西来获取与您想要的和没有rel="nofollow"的href的链接。
#<a\s+(?![^>]*rel\s*=\s*(['"])\s*nofollow\s*\1)[^>]*href\s*=\s*(["'])http://www.mysite.com[][\w-.~:/%?#@!$&'()*+,;=]*\2[^>]*>
<a\s+ # start of the a tag followed by at least a space
(?! # negative look-ahead: if there isn't...
[^>]* # anything except tag closing bracket
rel\s*=\s* # 'rel=', with spaces allowed
(['"]) # capture the opening quote
\s*nofollow\s* # nofollow
\1 # closing quote is the same as captured opening one
) # end of negative look ahead
[^>]* # anything but a closing tag
href\s*=\s* #
(["']) # capture opening quote
http://www.mysite.com # the fixed part of your url
[][\w-.~:%/?#@!$&'()*+,;=]* # url-allowed characters
\2 # closing quote
[^>]*> # "checks" that the tag is ending演示:http://regex101.com/r/hC8lV9
免责声明
这并不是为了检查输入是否格式良好,而是假设输入格式良好。这不会解释像转义的>或转义引号这样的东西,而且您很可能需要根据您的需要来调整它。基本上,no regex将给出一个完整的答案,。
如果您需要处理各种输入或可能格式错误的HTML,解析器将比regex更安全和更好地处理。
不过,我把这个放在这里,是为了给大家一个关于这个问题可以做什么的想法,因为在非常严格和狭义的上下文中,regex实际上是一个相关的解决方案。
发布于 2014-03-19 08:59:44
首先,不要使用正则表达式来解析网页的dom。PHP获得了它自己的文档对象模型,它完成了整个工作。只需看看http://de1.php.net/manual/en/class.domdocument.php和http://de1.php.net/manual/en/class.domxpath.php。
发布于 2017-07-29 14:23:29
如果您已经阅读过有关链接构建的任何内容,那么您可能已经看到有人提到了people和dofollow链接。这些是非常重要的术语理解,当你试图建立伟大的链接回到你的网站,以提高你的搜索引擎排名。但是,对于这一切都是新手的人来说,这可能有点令人困惑。我会帮你把它分解。
告诉蜘蛛爬一个链接,你什么都不用做。简单地使用上面所示的格式,搜索引擎蜘蛛将爬行提供的链接。
https://stackoverflow.com/questions/22499564
复制相似问题