如果URL包含一个模式但不包含另一个模式,则匹配URL的正则表达式
问题描述:
我需要创建一个正则表达式模式,以匹配所有包含String1但不包含String2的url。问题是URL可以同时包含String1和String2。例如,如果抓取电子商务网站,我希望收集目录页面而不获取产品URL。如果URL包含一个模式但不包含另一个模式,则匹配URL的正则表达式
例目录URL:http://www.domain.com/catalog/name字符串1:目录
实施例产品网址:http://www.domain.com/catalog/name/product/id => String2的:产品
使用上面的示例网址,字符串1是 “目录” 和String2的是 “产品”。我目前的模式获取目录网址是\/catalog(?:\/[\w-\/]*)?$
如何扩展此模式以跳过所有使用String2的URL?
答
我猜你正在寻找一个negative look ahead
举例来说,此正则表达式:
catalog\/name\/(?!product)
匹配(example):
http://www.domain.com/catalog/name/produc/id
但是,它不匹配( example):
http://www.domain.com/catalog/name/product/id
希望这有助于!
最简单的就是使用两个表达式。首先获取你的网址。在第二部分中,看看“产品”是否是URL的子字符串,如果是,请不要使用它。 –
感谢@aleph_null,但是我能够使用'\ /目录(?:\/[\ w - ] *)?(?!。* \/product \ /)来工作“ 它匹配”/ catalog “,然后可以选择满足字母数字字符或连字符的任何部分,除非后面跟着”/ product /“。 –