5
十一月
3

在.htaccess當中可以使用的Regular Expression – 1

目前台灣網路上最流行的那個RegEx教學是使用在SED裡面的,
而沒有最簡單的那種,例如使用在.htaccess當中的RegEx語法教學.

所以我來寫,雖說這種東西通常是拾人牙慧的啦…

[] 這兩個括號用來指定開始與結束,把東西包起來,那麼,要包哪些東西起來呢?

[a-e] 從a到e [c-e] 從c到e [a-z] 從a到z
[A-E] 從A到E [C-E] 從C到E [A-Z] 從A到Z (對,大小寫有差)

[0-9] 從0到9 [4-6]從4到6

[refly] 框框裡任一個字,像是r,e,f,l,y 都符合條件,但是"refly"不符合條件喔!
那要怎麼去指定"refly"這個字? 用 ^refly$ 就可以了. (^開始, $結束)

^ 在[]裡時,是用來做為否定, 例如 [^0-3]就是除了0,1,2,3之外都可以.

^ 在每一行最前端時,用來表示這一行的開始.

. 代表任何一個字

? 有在字串裡找到符合條件的結果 0或1次 , 例如 a? 表示找到0或1次a, (abc)?表示找到0或1次abc, [a-z]?找到任何a-z間的小寫字母0或1次

+ 有在字串裡找到符合條件的結果 1次以上 , 例如 a? 表示找到1次以上a, (abc)?表示找到1次以上abc, [a-z]?找到任何a-z間的小寫字母1次以上

* 有在字串裡找到符合條件的結果 0次以上 , 例如 a? 表示找到0次以上a, (abc)?表示找到0次以上abc, [a-z]?找到任何a-z間的小寫字母0次以上

(覺得0次很奇怪?參考第一個回覆吧, j大說的對,我沒用過這種用法所以自己認為*沒意義T_T)

RewriteCond 後面加規則,告訴Apache說:這就是你檢查的規則,看有沒有符合條件
RewriteRule 則是告訴Apache,如果有符合條件的,就這樣改寫網址

() 建立一個以後可以使用的變數

^ 這是一行的開始

$ 這是一行的結束,也可以拿來呼叫變數,限定單行RewriteRule內使用

% 將變數拿出來使用,基本上是在RewriteCond裡面指定條件,然後到RewriteRule裡面用%1來使用參數值

————————————————————-
所以以下是範例
————————————————————-

變數如何使用?

RewriteRule ^(var1)/no-var/(var2)$ /to-use-variables-type-$1-and-$2
(var1)跟(var2)用()包起來,表示他們是變數,後面就可以用$1和$2來做呼叫剛剛這一串的結果就會變成
to-use-variables-type-var1-and-var2

剛剛那一段的另外一種用法,先判斷再改寫
RewriteCond %{CONDITION_STUFF} ^(var1)/no-var/(var2)
RewriteRule ^no-var/no-var/no-var$ /to-use-variables-type-%1-and-%2

最後的結果會是這樣:
to-use-variables-type-var1-and-var2

那如果把$跟%這兩種變數夾在一起用呢?
RewriteCond %{CONDITION_STUFF} ^(var1)/no-var/(var2)
RewriteRule ^(var1)/no-var/(var2)$ /to-use-variables-type-$1-and-%2-$2

結果會變成這樣:
to-use-variables-type-var1-and-var2-var2

一樣還是可以用的.

相關的文章:

  1. 在.htaccess當中可以使用的Regular Expression – 2
  2. 在.htaccess當中可以使用的Regular Expression – 3
3 Comments:
  1. jaceju 5 十一月, 2007

    * 怎麼會沒意義呢?

    例如我幾個字串是這樣:

    1. "/xxx"
    2. "/xxx/123456″

    條件是第一個字串如果沒給數字,就預設給 0 ;不然的話就把後面的數字抓進來用。

    這時候可以這樣比對:

    ^\/xxx\/?(\d*)$

    這時候小括號得到的就是我們要的數字了。

    不曉得版主所說的沒意義是指?

  2. refly 5 十一月, 2007

    對不起,我沒考慮到這邊Q_Q

    原文已經修改,感謝jaceju大~

  3. jaceju 5 十一月, 2007

    :) 別這麼說啦~~我也在這裡得到很多寶貴的知識。大家一起成長囉~~

Post your comment




/R/e/f/l/y /N/e/t/w/o/r/k/