如何缩短正则表达式

时间:2015-03-31 09:24:15

标签: regex

我有一个带有以下正则表达式的重写规则:

RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/page-([0-9]+)/?$

应检测位于具有此格式的网址的-d-cpage-表达式后面的数字:

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 

1 个答案:

答案 0 :(得分:1)

你不能使用^.*[\-d\-c\page\-]([0-9]+)/?$,因为它的捕获量会低于你的预期。此外,“页面”不会被捕获,只有单个字母“p”,“a”,“g”,“e”。此外,\p是'不完整的令牌,使正则表达式无效。

这是regex101解释你的“固定”(只是为了看说明)缩短正则表达式:

enter image description here

在htaccess重写规则中,您无法遍历子匹配,您必须使用捕获组才能在以后的替换字符串中引用它们。