我一直在寻找数小时试图找到解决方案。我试图确定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)
其他我现在不记得了。
请求通常会出错:
preg_match(): Unknown modifier '|'
preg_match(): Unknown modifier '#'
preg_match(): Unknown modifier '['
编辑: 我想我应该声明REQUEST URI已经知道了。我试图证明整个字符串,以确保它不是一个虚假的字符串,即确保第一组只是小写字母,第二组只有11个数字。
答案 0 :(得分:4)
/
不是唯一可以用作分隔符的东西。实际上,您几乎可以使用任何非slphanumeric字符。我个人喜欢使用()
,因为它提醒我结果数组的第一项是整个匹配,它也永远不需要在模式中转义。
preg_match("(^/([a-z]+)/(\d+)$)i",$samplerequesturi,$out);
var_dump($out);
应该这样做。
答案 1 :(得分:1)
如果你想使用正则表达式(在这种情况下我认为没有必要,只需拆分“/”就可以了:
$samplerequesturi = "/variable/12345678910";
preg_match("@^/([A-Za-z]+)/(\d+)$@", $samplerequesturi, $out);
echo $out[1];
echo $out[2];
应该让你去
答案 2 :(得分:1)
您的问题可能是您正在使用/
正斜杠作为正则表达式分隔符(在正则表达式的开头和结尾处)。切换到使用正斜杠以外的字符,例如#
哈希符号或永远不需要出现在此特定表达式中的任何其他符号。然后你不需要在表达式中转义正斜杠字符。