TP正则路由

匿名 (未验证) 提交于 2019-12-03 00:37:01

例子:

'URL_ROUTE_RULES'=>array(     '/^([a-z]{2,40})\/changfang(?:\/([a-z]{2,60})?)?\/?(?:b(10|15|20|25|26)?)?(?:c(1|2|3)?)?(?:d(1|2)?)?(?:e(500|1000|1500|2500|5000|8000|10000|10001)?)?$/'=>array('Product/page_product_search?sepllname=:1&area=:2&price=:3&user_type=:4&rent_mode=:5&total=:6'),//厂房列表 ),

上面中
子表达式有(以()标记一个子表达式的开始和结束位置):
([a-z]{2,40})
(?:\/([a-z]{2,60})?)
(?:b(10|15|20|25|26)?)
(?:c(1|2|3)?)
(?:d(1|2)?)
(?:e(500|1000|1500|2500|5000|8000|10000|10001)?)

前面子表达式序号与后面参数位一一位置对应。


TP手册说明:

正则路由

正则路由也就是采用正则表达式定义路由的一种方式,依靠强大的正则表达式,能够定义更灵活的路由规则。

路由表达式支持的正则定义必须以“/”开头,否则就视为规则表达式。也就是说如果采用:

'#^blog\/(\d+)$#' => 'Blog/read/id/:1' 

方式定义的正则表达式不会被支持,而会被认为是规则表达式进行解析,从而无法正确匹配。

下面是一种正确的正则路由定义:

'/^new\/(\d{4})\/(\d{2})$/' => 'News/achive?year=:1&month=:2', 

对于正则表达式中的每个变量(即正则规则中的子模式)部分,如果需要在后面的路由地址中引用,可以采用:1、:2这样的方式,序号就是子模式的序号。

正则定义也支持函数过滤处理,例如:

'/^new\/(\d{4})\/(\d{2})$/' => 'News/achive?year=:1|format_year&month=:2', 

其中 year=:1|format_year 就表示对匹配到的变量进行format_year函数处理(假设format_year是一个用户自定义函数)。

更多的关于如何定义正则表达式就不在本文的描述范畴了。

文章来源: TP正则路由
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!