2012-05-08 284 views
0

我還在學習正則表達式,我似乎被卡住了。排除正則表達式匹配,如果它包含一個字符串

我想寫匹配這樣的包含「大量」 URL路徑的REG EXP:

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

只拿到產品的網頁,而不是類別頁面,如:

/bulk-category_one/ 
/another-category/ 

於是我想出了:

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

但還有分頁,所以當我把REG EXP在谷歌Analyti CS,我發現這樣的東西:

/bulk-category/_/showAll/1/ 

他們都有

/_/ 

,我不想包含

/_/ 

任何URL路徑,我不能弄清楚如何排除它們。

+0

你想要做的事情實際上是過濾本身的「第二級」。您可以通過更充分地指定模式中的URL結構來解決此問題。 –

+0

那你究竟在尋找什麼?一個正則表達式,它匹配任何段中不包含「bulk」的絕對路徑? – Gumbo

+0

@Karolis D,請給出一些基本的輸入和o/p的預期...然後我們可以確認是否有任何問題與RegEx,我還不清楚你在哪裏得到這個'/ bulk-category/_/showAll/1 /'在應用RegeEx之後,或者你想用'/ _ /'排除任何東西 – swapnilsarwe

回答

0

我會去這樣理解:

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

第一部分:

  • / - 匹配斜線
  • [^/\s]* - 匹配的一切,這不是一個斜槓,而不是一個空白
  • bulk - 字面匹配
  • [^/]* - 匹配的一切,這不是一個斜線
  • / - 匹配斜線
  • [^/\s]+ - 匹配的一切,這不是一個斜槓,而不是一個空白
  • (?!/) - 確保沒有斜槓之後(即url有兩部分)

第二部分更多的是一樣的,但是這次'bulk'預計在url的第二部分不是第一部分。

如果你需要的單詞「產品」特別是在URL的第二部分多了一個替代方案將需要:

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

如果我申請的是簡單的正則表達式到文件FILE

egrep ".*bulk.*product" FILE 

其中包含上面的示例,它只匹配bulkproduct的2行。我們可以,另外,排除「/ _ /」:

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

兩個調用往往更容易定義和理解,一個比一個大一個一勞永逸的。

相關問題