規(guī)則由2部分組成:舊網(wǎng)址的正則表達式、新網(wǎng)址的正則表達式。
正則標(biāo)準(zhǔn)說明:支持PCRE規(guī)范的表達式。
以下舉例說明:
改版前url:example.com/bbs123/?a=2&b=137
改版后url:bbs123.yoursite.com/thread-137-2.html
針對這一類長相的url改版
首先使用正則描述改版前舊url規(guī)則:^example\.com/([a-z0-9]+)/\?a=([0-9]+)&b=([0-9]+)$
再用字符串和捕獲引用描述改版后新url規(guī)則: \1.yoursite.com/thread-\3-\2.html
注:其中\(zhòng)為轉(zhuǎn)義字符,其后可以跟隨數(shù)字0-9以表示一個對捕獲字符串的引用,或者跟隨另一個以表示一個字符’’,其余字符皆不可以跟隨在一個單獨的\之后。其余字符都表示他們自身。
提交以上正則規(guī)則后,如改版前url
example.com/bbs123/?a=2&b=137
會匹配這條規(guī)則,并產(chǎn)生如下的捕獲對應(yīng)關(guān)系
bbs123 => \1
2 => \2
137 => \3
進而得到最終的改版后url長相為
bbs123.yoursite.com/thread-137-2.html
請注意如下的url將不在本規(guī)則覆蓋范圍內(nèi):
example.com/BBS123/?a=2&b=137
原因:規(guī)則配置的第一個捕獲中指定可通配[a-z0-9]但未包括大寫字母
example.com/bbs123/?a=&b=137
原因:規(guī)則配置的第二個捕獲指定+匹配至少要有一個字符
example.com/bbs123/?a=2&b=137&c=45
原因:規(guī)則最后指定$表示斷言url應(yīng)該到此結(jié)束,否則不匹配
附PCRE規(guī)則常用字符,更多可到標(biāo)準(zhǔn)庫中進行了解。
^:表示字符串開始,即在此之前不能再有任何字符
$:表示字符串結(jié)束,即在此之后不能再有任何字符
?:表示之前的元素可以出現(xiàn)0次或1次
*:表示之前的元素可以出現(xiàn)0次或多次
+:表示之前的元素可以出現(xiàn)1次或多次
{數(shù)字}:表示之前的元素必須出現(xiàn)數(shù)字次
{數(shù)字,}:表示之前的元素需要出現(xiàn)至少數(shù)字次
{數(shù)字1,數(shù)字1}:表示之前的元素出現(xiàn)次數(shù)不少于在數(shù)字1且不大于數(shù)字2
[一些字符]:表示一個在一些字符內(nèi)的字符,一些字符部分可以用-進行簡記,例如[abcde]等同于[a-e]
.:表示一個任意字符
\:轉(zhuǎn)義字符,當(dāng)上面有特殊含義的字符以及\本身需要表示其字面值而非特殊含義時,可以用特殊字符表示這個特殊字符本身,例如?表示一個?而非\出現(xiàn)0次或一次。轉(zhuǎn)義字符還可以和一些非特殊字符使用,表示一個特殊含義,見后續(xù)的描述
\d:表示一個數(shù)字[0-9]
\w:表示一個單詞[a-zA-Z0-9_]
(子模式):一般?和*等計數(shù)字符只對前一個元素生效,當(dāng)需要對一個子模式生效時,需要加上括號。同時,括號內(nèi)子模式所匹配的字符串,會作為捕獲存在,后續(xù)可以引用,計數(shù)方式為“從左至右每一個加括號的子模式依次被編號為捕獲1、2、3、4等”。整個規(guī)則本身匹配部分也是一個捕獲,記為0號捕獲
|:表示之前的子模式和之后的子模式至少有一個匹配,例如a(bc|de)f可以匹配adef和abcf