2012-11-22 74 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匹配,对不起,我忘记提及这个 –