例子:
'/^mob_materialscentre\/?(?:a(\d+)?)?(?:b(\d+)?)?(?:c(\d+)?)?(?:d(\d+)?)?(?:e(\d+)?)?(?:f(.*?))?$/'=> array('Product/api_product_search?TYPE_ID=:1&NAME_ID=:2&TEXTURE_ID=:3&SPEC_ID=:4&MANUFACTOR_ID=:5&SEARCH=:6'),
上面中
子表达式有(以()标记一个子表达式的开始和结束位置):
(?:a(\d+)?)
(?:b(\d+)?)
(?:c(\d+)?)
(?:d(\d+)?)
(?:e(\d+)?)
(?:f(.*?))
前面子表达式序号与后面参数位一一位置对应(:1 :2 :3 :4 :5 :6)。用正则的方式一一将参数传递到后台做处理。
<div class="select-bottom">
<a data-id="-1"
href="/mobile/mob_materialscentre/a0{$NAME_ID_CONDITION}{$TEXTURE_ID_CONDITION}{$SPEC_ID_CONDITION}{$MANUFACTOR_ID_CONDITION}/">不限</a>
<foreach name="cp_product_types" item="vo">
<a data-id="{$vo['type_id']}"
href="/mobile/mob_materialscentre/a{$vo['type_id']}{$NAME_ID_CONDITION}{$TEXTURE_ID_CONDITION}{$SPEC_ID_CONDITION}{$MANUFACTOR_ID_CONDITION}/">{$vo['type_name']}</a>
</foreach>
</div>
URL方式格式例子:
http://www.raw_materials.com/mobile/mob_materialscentre/a2b3c3d32e5/
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是一个用户自定义函数)。
更多的关于如何定义正则表达式就不在本文的描述范畴了。