如果包含字符串,则排除正则表达式匹配

时间:2012-05-08 18:53:52

标签: regex url

我还在学习正则表达式,但我似乎陷入困境。

我想编写一个reg exp,它匹配包含“bulk”的URL路径:

/bulk-category_one/product
/another-category/bulk-product

仅获取产品页面,但不包括以下类别页面:

/bulk-category_one/
/another-category/

所以我想出了:

[/].*(bulk).*[/].+|[/].*[/].*(bulk).*

但是有分页,所以当我将reg exp放入Google Analytics时,我发现了以下内容:

/bulk-category/_/showAll/1/

所有人都有

/_/ 

我不希望任何包含

的网址路径
/_/ 

我无法弄清楚如何排除它们。

2 个答案:

答案 0 :(得分:0)

我会这样做:

/[^/\s]*bulk[^/]*/[^/\s]+(?!/)|/[^/\s]+/[^/]*bulk[^/\s]*(?!/)

第一部分:

  • / - 匹配斜杠
  • [^/\s]* - 匹配所有不是斜线而不是空白的内容
  • bulk - 字面匹配
  • [^/]* - 匹配所有不是斜线的内容
  • / - 匹配斜杠
  • [^/\s]+ - 匹配所有不是斜线而不是空白的内容
  • (?!/) - 确保之后没有斜线(即网址分为两部分)

第二部分更多相同,但这次'批量'预计在网址的第二部分而不是第一部分。

如果您需要在网址的第二部分专门提供“产品”一词,则需要另外一种选择:

/[^/\s]*bulk[^/]*/[^/\s]*product[^/\s]*(?!/)|/[^/\s]+/[^/]*bulk[^/\s]*product[^/\s]*(?!/)|/[^/\s]+/[^/]*product[^/\s]*bulk[^/\s]*(?!/)

答案 1 :(得分:-1)

如果我将这个简单的正则表达式应用于文件FILE

egrep ".*bulk.*product" FILE 

包含上面的示例,它只与bulkproduct的2行匹配。此外,我们可以排除'/ _ /':

egrep ".*bulk.*product" FILE | egrep -v "/_/" 

两次调用通常比一次性的更容易定义和理解。