在CodeIgniter路由中使用RegEx

时间:2013-02-28 05:06:19

标签: php codeigniter

我正在将旧网站转换为CodeIgniter,这涉及保留一些旧的URL。我需要能够传递单个字符,#,A-Z或a-z。这是我的模式:

/^[a-zA-Z#]$/

通过将它传递给preg_match(),我的所有测试似乎都运行得很好。我只是将它添加到这样的CI路线中:

$route['(:any)/(/^[a-zA-Z#]$/)'] = "collection/view/$1/alpha/$2";

它给了我这个错误:

Message: preg_match(): Unknown modifier '/'

我不能为我的生活按摩这种模式,让CI接受它。我认为这是奇怪的逃脱。任何帮助将不胜感激。

更新:

我潜入/core/Router.php只是为了看看CI对模式做了什么。以下是CI正在使用的内容:

#^(.+)/(/^[a-zA-Z\#]$/)$#

它将整个传递的字符串转换为一个大模式。

解决:

在弄清楚CI试图创建一个大模式后,我从头开始重写了模式并删除了(:any)。我也用#替换了#。这是我的最终解决方案:

 $route['(^(.+)/([a-zA-Z\+]$))'] = "collection/view/$2/alpha/$3";

如果有人有更优雅的图案,请随时发布。谢谢!

2 个答案:

答案 0 :(得分:2)

$route['(:any)/(^([a-zA-Z]|\#))'] = "collection/view/$1/alpha/$2";

答案 1 :(得分:0)

我认为你不需要在正则表达式中逃脱#。尝试使用

/^([a-zA-Z#])$/

而不是

(/^([a-zA-Z]|#)$/)