0

我正在将旧站点转换为 CodeIgniter,这涉及保留一些旧 URL。我需要能够传递单个字符,#、AZ 或 az。这是我的模式:

/^[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";

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

4

2 回答 2

2
$route['(:any)/(^([a-zA-Z]|\#))'] = "collection/view/$1/alpha/$2";
于 2013-02-28T05:11:04.307 回答
0

我认为您不需要在正则表达式中转义 # 。尝试使用

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

代替

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

于 2013-02-28T05:34:03.027 回答