我正在尝试使用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”
我需要建议上面的表达式是否正常,或者是否有比上面更好的正则表达式模式,因为我在正则表达式中很新。谢谢。
答案 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]
表示“任何字符”。只需使用.
。