【问题标题】:Regex expression that matches URLs if it contains one pattern but not another如果它包含一种模式但不包含另一种模式,则匹配 URL 的正则表达式
【发布时间】: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


【解决方案1】:

我猜你正在寻找negative look ahead

例如,这个正则表达式:

catalog\/name\/(?!product)

匹配 (example):

http://www.domain.com/catalog/name/produc/id

但是,它不匹配 (example):

http://www.domain.com/catalog/name/product/id

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2019-04-04
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多