2013-03-12 87 views
0

我正在使用PHP,並且我一直試圖創建正則表達式模式來捕獲部分URL路徑,但無濟於事。需要正則表達式來捕獲url路徑

可能URL路徑可以是任何這些:

  • 「產品/ ZZZ」
  • 「YYYYYYYY /產品/ ZZZ」
  • 「XXXXX/YYYYYYYY /產品/ ZZZ」
  • 「xxxxx/yyyyyyyy /.../product/zzzz」(...表示其他可能的詞)

我需要捕獲的是「產品」之前的部分。

對於第一種情況,結果應該是一個空字符串。 其餘的,他們是「yyyyyyyy」,「xxxxx/yyyyyyyy」和「xxxxx/yyyyyyyy/...」

任何人都可以在這裏給我提示?謝謝!

PS。 它看起來像我想要的部分是重複相同的模式「xxxx /」。但我不善於使用正則表達式組。

更新:

我可能找到了解決,通過捕獲模式 「XXX /」 具有零次或多個重複: 「([^ /] + /)*」

等等全正則表達式應該「(([^ /] + /)*)產品/([^ /] +)」

@SERPRO:它通過了您的「Live RegExp」測試。 希望它有幫助。

+1

** [你有什麼嘗試?](http://whathaveyoutried.com)** – 2013-03-12 16:14:27

+0

我似乎找到了解決方案,並希望分享給你們所有人。請參閱我的原始文章 – dikko2000 2013-03-13 02:43:56

回答

0

這應做到:

^(.*[^/]|)/*product/[^/]+/*$

它還將允許在路徑的結束斜線任意數量。 圓括號內的部分是你的結果。

+0

的最後部分感謝您的快速回答。但我需要處理任何數量的「xxx /」模式,而不僅僅是3. – dikko2000 2013-03-12 16:24:38

+0

通常你通過點擊「接受答案」鏈接感謝;-) – lilalinux 2013-03-12 16:26:48

+0

你的模式匹配「xxx/product/abc」,但不是「xxx/yyy/product/abc「,也不是」xxx/yyy/zzz/product/abc「。 – dikko2000 2013-03-12 16:30:20

0

這應該爲你工作:

#(.*?)/?product.*\b# 

您可以在這裏看到的結果字符串的例子:

http://xrg.es/#5awa10

+0

那麼富/酒吧/產品/ meh /產品/ zzz ;-) – lilalinux 2013-03-12 16:27:52

+0

@lilalinux看到我編輯的答案.. :) – SERPRO 2013-03-12 16:30:24

+0

是的,但使用太多不必要的巫術: - ) – lilalinux 2013-03-12 16:33:49

1

我會用parse_url()

$path = parse_url($url, PHP_URL_PATH); 
// Deal with $path to figure out what's after '/product/' 
+0

對不起,正則表達式是我唯一的選擇。謝謝 – dikko2000 2013-03-12 16:32:31