简单的正则表达式问题(php)

时间:2010-12-03 04:00:31

标签: php regex codeigniter

我一直在路线文件中使用这一行:

$route['^(?!home|members).*'] = "pages/view/$0";

表达式(^(?!home|members).*)左侧数组中的字符串是我想要弄清楚的。

基本上任何不是的网址:

/home/home//members/members/应为真。我遇到的问题是,如果网址是/home-asdf。这算在我的被排除网址列表中(在我的例子中只有'home'和'members'。

关于如何解决这个问题的想法?

3 个答案:

答案 0 :(得分:1)

尝试此修改:

^(?!(home|members)([/?]|$)).*

这会过滤掉以homemembers开头的网址,前提是这些名称后面紧跟斜杠或问号([/?])或字符串结尾({{ 1}})。

答案 1 :(得分:0)

http://www.regular-expressions.info/

.运算符匹配所有字符。 *运算符表示先前的模式将重复0次或更多次。这意味着你的路线的结尾在单词home或member之后的任何字符都匹配任何字符。如果您只想匹配一个或零斜杠,请将.*更改为/?

答案 2 :(得分:0)

顺便说一句,我一直都在使用它,它可以创造奇迹:http://www.rubular.com/ 它主要用于ruby,但在为php等编制通用正则表达式时效果很好。