Php 试图在Preg_匹配中找到正斜杠

Php 试图在Preg_匹配中找到正斜杠,php,preg-match,Php,Preg Match,我已经找了几个小时试图找到解决这个问题的办法。我试图确定请求URI是否合法,并将其分解 $samplerequesturi=“/variable/12345678910” 为了确定它是否合法,第一部分变量仅为字母,长度可变。第二部分是数字,总共应该有11个。我的问题是转义正斜杠,以便在uri中匹配它。我试过: preg_match("/^[\/]{1}[a-z][\/]{1}[0-9]{11}+$/", $samplerequesturi) preg_match("/^[\\/]{1}[a-z]

我已经找了几个小时试图找到解决这个问题的办法。我试图确定请求URI是否合法,并将其分解

$samplerequesturi=“/variable/12345678910”

为了确定它是否合法,第一部分
变量
仅为字母,长度可变。第二部分是数字,总共应该有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)
我现在记不起来了

请求通常会出错:

preg_match(): Unknown modifier '|' 
preg_match(): Unknown modifier '#'
preg_match(): Unknown modifier '['
编辑: 我想我应该声明请求URI是已知的。我试图证明整个字符串,以确保它不是伪造的字符串,即确保第一组仅为小写字母,第二组仅为11个数字。

如果您想使用正则表达式(我认为在这种情况下没有必要),只需在“/”上拆分即可:

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

您的问题可能是使用了
/
正斜杠作为正则表达式分隔符(在正则表达式的开始和结束处)。切换到使用除正斜杠以外的字符,例如
#
哈希符号或任何不需要在此特定表达式中出现的其他符号。这样,您就根本不需要在表达式中转义正斜杠字符。

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

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

这应该可以做到。

您应该将字符串按
/
拆分,并分别对每个部分执行验证。您也可以使用除
/
之外的分隔符来避免一些转义。例如
预匹配(!^abc.$!”
也可以工作。
echo$out[1];
echo$out[2]
两者都生成
Array
。尝试使用preg\u match而不是preg\u match\u all。我尝试了哈希,但仍然没有找到匹配项。
preg\u match(“^[/]{1}[a-z][/]{1}[0-9]+$”
不需要将单个字符括在字符集括号中,如果只有一个字符,也不需要指定数量,因此
[/]{1}
可以简单地替换为
/
。你忘记在你的
[a-z]
后面放一个
+
(匹配多个)。所以试试
“#^/([a-z]+)/([0-9]+)$#”
,看看这是否有效。