【发布时间】:2011-12-21 17:05:03
【问题描述】:
我需要创建一个正则表达式模式,该模式将匹配所有包含 String1 但不包含 String2 的 url。问题是 URL 可以同时包含 String1 和 String2。例如,如果爬取电子商务网站,我想在不获取产品 URL 的情况下收集目录页面。
示例目录 URL:http://www.domain.com/catalog/name String1:目录
示例产品 URL:http://www.domain.com/catalog/name/product/id => String2:产品
使用上面的示例 URL,String1 是“目录”,String2 是“产品”。我目前获取目录 URL 的模式是 \/catalog(?:\/[\w-\/]*)?$
如何扩展此模式以跳过所有带有 String2 的 URL?
【问题讨论】:
-
最简单的就是使用两个表达式。首先获取您的网址。在第二个中,查看“product”是否是 URL 的子字符串,如果是,则不要使用它。
-
感谢@aleph_null,但我能够使用
\/catalog(?:\/[\w-]*)?(?!.*\/product\/)使其工作它与“/catalog”匹配,然后可选地匹配满足字母数字字符或连字符的url的任何部分,除非它是后跟“/product/”。
标签: regex web-crawler