PHP正则表达式匹配

时间:2012-11-22 04:42:47

标签: php preg-match

我正在尝试使用preg_match在我的网址中查找匹配的ID 123。我尝试了以下方法:

$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可以是“/ category / any-text-string / 123?querystring”

我需要建议上面的表达式是否正常,或者是否有比上面更好的正则表达式模式,因为我在正则表达式中很新。谢谢。

2 个答案:

答案 0 :(得分:1)

为什么这么难?尝试

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

答案 1 :(得分: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]表示“任何字符”。只需使用.