-2

preg_matchを使用して、URLで一致するID123を見つけようとしています。私は次のことを試しました:

$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"。オプションにします。

  • \/[^/]+\/2 つのスラッシュの間の任意のテキスト文字列 (スラッシュを除く) に一致させるために使用します。スラッシュを除外しない場合は、次のような文字列も一致します。"/category/abc/def?a=/123"

一般的注意事項:

  • 文字クラス内では、一致させたい文字をリストするだけで、それらを区切らないでください|(一致させたい文字の 1 つでない限り|)。したがって、元の正規表現で[\w|\W]は、 [\w\W].

  • [\w\W]「任意の文字」を意味するために使用しないでください。を使用するだけ.です。

于 2012-11-22T05:10:01.380 に答える