我对某些我知道必须很简单的事情感到困惑,但现在已经转了一圈了。

我想使用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]与单个字符匹配,该字符可以是admin。如果您跳过方括号,则表示您匹配的是文字字符串。但是,作为我的代码证明,如果您需要检查字符串是否以固定的子字符串开头,则根本不需要使用正则表达式。

关于php - 正则表达式帮助,以匹配除管理文件夹之外的任何URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6285677/

10-09 13:52