我还在学习正则表达式,但我似乎陷入困境。
我想编写一个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/
所有人都有
/_/
我不希望任何包含
的网址路径/_/
我无法弄清楚如何排除它们。
答案 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
包含上面的示例,它只与bulk
和product
的2行匹配。此外,我们可以排除'/ _ /':
egrep ".*bulk.*product" FILE | egrep -v "/_/"
两次调用通常比一次性的更容易定义和理解。