Php 如何捕捉不带';不要以“开始”;ajax/";对CodeIgniter使用正则表达式?
我正在为我的CodeIgniter应用程序开发一些路由,我需要声明一个“catch all”/除了一个正则表达式。任何不以“ajax/”开头的路由都应该重定向到“主”路由器。像这样:Php 如何捕捉不带';不要以“开始”;ajax/";对CodeIgniter使用正则表达式?,php,regex,codeigniter,Php,Regex,Codeigniter,我正在为我的CodeIgniter应用程序开发一些路由,我需要声明一个“catch all”/除了一个正则表达式。任何不以“ajax/”开头的路由都应该重定向到“主”路由器。像这样: $route['regexmagichere'] = "main"; 所以这绝对超出了我的正则表达式技能,我需要一些帮助。正则表达式应该在所有不以“ajax/”开头的字符串上返回true,如下所示: $string_one = "ajax/someotherstuffhere"; $string_two = "
$route['regexmagichere'] = "main";
所以这绝对超出了我的正则表达式技能,我需要一些帮助。正则表达式应该在所有不以“ajax/”开头的字符串上返回true,如下所示:
$string_one = "ajax/someotherstuffhere";
$string_two = " ajax/test";
$string_three = "somestuffhere";
这里$string\u one将是唯一返回false的。谢谢你的时间 你可以试试
^((?!ajax).*)
我想,^(?)就行了
我强调“think”!对于您的请求是litereal。对于所有不以ajax/
开头的字符串,返回true的regexp:
^(?!ajax/).*
您可能需要转义/
,因为\/
(?!)
是一个否定的前瞻表达式。如果路由的执行有顺序,您可以在开始时命名更具体的路由,同时在结尾添加一个catchall路由。从手册中可以看出:显然类似的模式(?!foo)bar找不到前面有“foo”以外的内容的“bar”的出现;它查找任何“bar”的出现,因为当后面三个字符是“bar”时,断言(?!foo)始终为真。需要一个lookbehind断言来实现此效果。@问号-在本例中不正确^
锚定到字符串的开头,然后(?!ajax)
确保第一个字符不是“ajax”
继续使用(.*)
捕获整个字符串(?!foo)bar
和(?!foo)。*
-此解决方案可以正常工作,尽管可能不需要捕获组-使用^(?!ajax).*
很好。在字符串开头使用look behind似乎很愚蠢…这将匹配任何以/
开头的字符串。look behind在/,并且匹配/someotherstuff此处满足问题的标准否?您是否在CodeIgniter上专门测试过此表达式?它是否在所有路径的开头都包含斜杠?Will斜杠需要转义吗?codeignitor使用preg#u match使用#分隔符,所以不,斜杠不需要转义,我的坏,但不会有什么影响。没有前导斜杠,所以这个表达式永远不会落入gnarf的注释中。只是想知道,如果这只是一个布尔匹配,*
是否有必要?可能没有……问题bly也不是必需的,但我没有进行测试,也不知道如果在路由匹配中不使用整个字符串,codeignator是否会做一些奇怪的事情。。。