我正在将旧网站转换为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";
如果有人有更优雅的图案,请随时发布。谢谢!
答案 0 :(得分:2)
$route['(:any)/(^([a-zA-Z]|\#))'] = "collection/view/$1/alpha/$2";
答案 1 :(得分:0)
我认为你不需要在正则表达式中逃脱#。尝试使用
/^([a-zA-Z#])$/
而不是
(/^([a-zA-Z]|#)$/)