我有一个带有以下正则表达式的重写规则:
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/page-([0-9]+)/?$
应检测位于具有此格式的网址的-d
,-c
和page-
表达式后面的数字:
http://localhost/tshirtshop/regional-d1/french-c1/page-2
我只是想知道为什么正则表达式不会被缩短为:
^.*[\-d\-c\page\-]([0-9]+)/?$ (which means beginning of the expression- any charachters repeated n times - '-d'or '-c' or 'page-' - the expression to be catched
答案 0 :(得分:1)
你不能使用^.*[\-d\-c\page\-]([0-9]+)/?$
,因为它的捕获量会低于你的预期。此外,“页面”不会被捕获,只有单个字母“p”,“a”,“g”,“e”。此外,\p
是'不完整的令牌,使正则表达式无效。
这是regex101解释你的“固定”(只是为了看说明)缩短正则表达式:
在htaccess重写规则中,您无法遍历子匹配,您必须使用捕获组才能在以后的替换字符串中引用它们。