我对某些我知道必须很简单的事情感到困惑,但现在已经转了一圈了。
我想使用php和preg_match创建一个与cms路由功能一起使用的正则表达式,以匹配任何不以字符串admin/开头的URL,因为somedomain.com/admin/将是cms的管理部分。
到目前为止,我已经尝试过
preg_match('#^([^admin])+(.+)$#', 'mens-books'))
由于我正在寻找的网址字符串'mens-books'与字符串'admin'中的字母m匹配而失败,因此它失败了。
我也尝试过这样做:
preg_match('#^([^admin$])+(.+)$#', 'mens-books'))
因为美元表示字符串的结尾,但这也不起作用。
然后,我这样做:
preg_match('#^[?!=admin]+(.+)$#', 'mens-books'))
它返回true,但只有我认为是因为正则表达式中的?!=现在将匹配以a,d,m,i或n开头的任何内容。
请问有人能帮忙吗?我愿意接受任何建议。
谢谢你。
马特
最佳答案
if (substr($url, 0, 6) !== 'admin/')
{
echo 'Yippie';
}
但是要回答正则表达式的问题。当使用方括号时,您要指定一个字符类。这意味着
[admin]
与单个字符匹配,该字符可以是a
,d
,m
,i
或n
。如果您跳过方括号,则表示您匹配的是文字字符串。但是,作为我的代码证明,如果您需要检查字符串是否以固定的子字符串开头,则根本不需要使用正则表达式。关于php - 正则表达式帮助,以匹配除管理文件夹之外的任何URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6285677/