-2

我正在尝试使用 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”

我需要建议上面的表达式是否可以,或者是否有比上面更好的正则表达式模式,因为我对正则表达式很陌生。谢谢你。

4

2 回答 2

1

为什么这么难?尝试

$stringurl = "/category/any-text-string/123";
$url = explode('/',$stringurl);
in_array('123',$url); // Returns TRUE if found in the array, FALSE otherwise.
于 2012-11-22T04:48:43.333 回答
0

我认为以下 RegExp 将更好地满足您的需求:

/^\/category\/[^\/]+\/(\d+)(?:\?.*)?$/
  • 使用^and$匹配字符串的开头和结尾。没有它们,您将匹配以下字符串:"/abc/category/any-text/123""/category/any-text/123abc"

  • 明确检查该"?querystring"部分。使其成为可选的。

  • 用于\/[^/]+\/匹配两个斜杠之间的任何文本字符串(斜杠除外)。如果您不排除斜杠,那么您还将匹配以下字符串:"/category/abc/def?a=/123"

一般注意事项:

  • Within a character class just list the chars you want to match, don't separate them with | (unless | is one of the chars you want to match). So in your original regexp, [\w|\W] should have just been [\w\W].

  • Don't use [\w\W] to mean "any character". Just use ..

于 2012-11-22T05:10:01.380 回答