2012-11-22 77 views
-2

我試圖使用preg_match在我的url中查找匹配的ID 123。我試過如下:PHP正則表達式匹配

$stringurl = "/category/any-text-string/123"; 

preg_match('/\/category\/[\w|\W]+\/(\d+)/', $stringurl, $matches); 

結果:

array(2) { [0]=> string(21) "/category/any-text-string/123" [1]=> string(2) "123" } 

stringurl可以用 「/類別/任何文本串/ 123查詢字符串?」

我需要建議的表達是否以上好吧,還有比上面更好的正則表達式模式,因爲我在正則表達式中很新。謝謝。

回答

0

我認爲下面的RegExp將更好地滿足您的需求:

/^\/category\/[^\/]+\/(\d+)(?:\?.*)?$/ 
  • 使用^$匹配開頭和字符串的結尾。沒有它們,你會匹配如下字符串:"/abc/category/any-text/123""/category/any-text/123abc"

  • 明確檢查"?querystring"部分。使其成爲可選。

  • 使用\/[^/]+\/來匹配兩個斜槓之間的任何文本字符串(斜線除外)。如果不排除斜線,那麼你也將匹配字符串一樣:"/category/abc/def?a=/123"

一般注意事項:

  • 在一個字符類只列出你想匹配的字符,不要」將它們與|分開(除非|是您想要匹配的字符之一)。所以在你原來的正則表達式中,[\w|\W]應該是[\w\W]

  • 請勿使用[\w\W]表示「任何字符」。只需使用.即可。

+0

ty李。它的工作原理非常完美,特別適合像我這樣的初學者。真的很感激它。 :) –

+0

yw。樂意效勞。 – Lee

1

爲什麼這麼難?嘗試

$stringurl = "/category/any-text-string/123"; 
$url = explode('/',$stringurl); 
in_array('123',$url); // Returns TRUE if found in the array, FALSE otherwise. 
+1

是的,這是該問題的良好解決方案。如果你需要在$ stringurl的最後找到'123',那麼檢查數組$ url – Ramsharan

+0

的最後一個元素,謝謝diEcho,我需要將url與/ category/text/id匹配,對不起,我忘記提及這個 –