preg_match函数不接受符号“/”

I have the following code:

  $URI = "controller/method/parms";
  $pattern = "a-z0-9_-/";
  echo preg_match("/^[". $pattern ."]+$/i", $URI);

Because of this / symbol, the operation fails and appears this error:
Warning: preg_match(): Unknown modifier ']'. but if I remove that symbol, everything will work correctly.

Escape the slash and move the dash at the end of the character class:

$pattern = "a-z0-9_\/-";
preg_match("/^[". $pattern ."]+$/i", $URI);

Note: preg_quote doesn't work in this case because it escapes the dash, I don't know why.

You could also use another delimiter:

$pattern = "a-z0-9_/-";
preg_match("~^[". $pattern ."]+$~i", $URI);