试图在 Preg_Match 中找到正斜杠

Go3*_*eam 4 php preg-match

我一直在寻找几个小时试图找到解决方案。我试图确定 REQUEST URI 是否合法并从那里分解它。

$samplerequesturi = "/variable/12345678910";

为了确定它是否合法,第一部分variable只是字母并且长度可变。第二部分是数字,总共应该有 11 个。我的问题是转义正斜杠,因此它在 uri 中匹配。我试过了:

preg_match("/^[\/]{1}[a-z][\/]{1}[0-9]{11}+$/", $samplerequesturi)
preg_match("/^[\\/]{1}[a-z][\\/]{1}[0-9]{11}+$/", $samplerequesturi)
preg_match("/^#/#{1}[a-z]#/#{1}[0-9]{11}+$/", $samplerequesturi)
preg_match("/^|/|{1}[a-z]|/|{1}[0-9]{11}+$/", $samplerequesturi)
Run Code Online (Sandbox Code Playgroud)

其他的我现在想不起来了。

请求通常会出错:

preg_match(): Unknown modifier '|' 
preg_match(): Unknown modifier '#'
preg_match(): Unknown modifier '['
Run Code Online (Sandbox Code Playgroud)

编辑:我想我应该声明 REQUEST URI 是已知的。我试图证明整个字符串以确保它不是伪造的字符串,即确保第一组只有小写字母,第二组只有 11 个数字。

Nie*_*sol 5

/不是唯一可以用作分隔符的东西。事实上,您几乎可以使用任何非数字字符。我个人喜欢使用,()因为它提醒我结果数组的第一项是整个匹配项,而且它也永远不需要在模式中转义。

preg_match("(^/([a-z]+)/(\d+)$)i",$samplerequesturi,$out);
var_dump($out);
Run Code Online (Sandbox Code Playgroud)

那应该这样做。


moo*_*pet 2

如果你想使用正则表达式(我认为在这种情况下没有必要),只需在“/”上进行分割就可以了:

$samplerequesturi = "/variable/12345678910";
preg_match("@^/([A-Za-z]+)/(\d+)$@", $samplerequesturi, $out);
echo $out[1];
echo $out[2];
Run Code Online (Sandbox Code Playgroud)

应该让你继续