精華區beta mud_sanc 關於我們 聯絡資訊
  最近整理硬碟檔案,需要用到大量更名的軟體,但很多軟體本身無法處理擁有 相同格式,內容不同的檔名做首尾調換的功能。最後使用了Ant Renamer 2與 Flexible Renamer,這兩種都能使用正規表示法自訂更名的規則,剛好版上有 MUSHclient的教學,裡面有正規表示法的介紹。對於內容的部份,個人再稍微擴充 說明一下,反正用途廣泛,學一下不會有壞處。如有錯誤,煩請指正。 這裡提供一個連結,可以線上演練正規表示法: http://www.rubular.com/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 「主」代表做為主詞的存在,它能單獨代表一個符合條件的字串。 「輔」用來延伸定義主詞的條件,要搭配主詞才有作用。主詞不限於匹配字元,    一般字元也能當主詞使用,有點像裝備名稱的後綴,沒有裝備,有後綴也    沒意義。 「它」表意用。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 它「^」表示開頭。在一行裡有連續性重複字串時,它可以讓表達式的結果變得正確。 它「\」效果類似於 zMUD 中的「~」,功能應是切換符號與字串的記號。如:     \[\],則[]會被視為一般字元,\d\D則會將dD當成匹配字符來用。 它「$」表示結束。在一行裡有連續性重複字串時,它可以讓表達式的結果變得正確。 主「.」匹配任何單個字元,可以單獨使用。 輔「*」用來定義主詞長度為零個字元以上,也就是該字串可能很長,也可能不存在。     輔助用,不能單獨使用。如:     .是一個字元,而.*就是沒有字串或很長的字串,甚至換行換頁了,都能符合     條件。     Bo*M,主詞是o,但o不需要存在,bm符合條件,bom也是,booooooooom亦同。 輔「+」用來定義主詞的長度為一個字元以上,表示該字串一定存在,但長度不一定。     輔助用,不能單獨使用。 輔「?」用來定義主詞的長度是零到一個字元,表示該字串最多一個字元長度,也可能     不存在。     輔助用,不能單獨使用。 輔「{n}」用來限制匹配的長度,\d{8}就是指八位數的數字。 輔「{n,}」用來限制匹配的最少長度,\d{8,}就是指至少八位數的數字。 輔「{n,m}」限制匹配的最高最低長度,\d{4,8}就是指最低四位數,最長八位數旳數字。 主「\d」匹配數字,可獨自使用。 主「\D」匹配非數字,可獨自使用。 主「\s」匹配空白,可獨自使用。      主「\S」匹配非空白,可獨自使用。 主「\w」匹配英文字元,可獨自使用。 主「\W」匹配非英文字元,可獨自使用。 主「\f」匹配一個換頁符。以MS office Word而言,就是ctrl+enter。這個應該很難     用到。 主「\n」匹配一個換行符。以MS office Word而言,熱鍵好像是shift+enter。如果     想抓一行以上的訊息,不妨試試(.*\n.*)! 主「\r」匹配一個回車符。以MS office Word而言,就是按下enter,換段。這個應該很     難用到。 主「\b」匹配英文單字邊界,邊界不是指後面的空格,而是指單字最後一個字母和空格     之間的字元,天知道是指什麼,只要明白它會確認是否為單字的字尾就夠了。     例如:ver\b可以匹配never中的ver,但不能匹配verb中的ver。 主「\B」匹配非英文單字邊界,定義於前項相反,例子的結果當然也是相反。它有認單     字的效果,例如:     表達式為the\b system,當字串為the system,結果為相符。     表達式為the\B system,當字串為the system,結果為不匹配,而字串為     thesystem時,結果還是不匹配。 主「(pattern)」匹配固定字串,但視內容而定,同時也會取得該字串內容。如:         (bahamudo)代表匹配限制成bahamudo,而透過()將bahamudo取得。         (\w{7})代表匹配7個字元長度的英文字元,如果字串是bahamudo,         則bahamud會被匹配成功,而o將被排除。透過(),bahamudo將被取 得。其它用法有:  (?:pattern):匹配固定字串,然後不取得字串內容。有時你需要用()區隔,但沒必         要取得它時使用。  (?=pattern):在任何匹配pattern的字串開始處往前匹配尋找字串。這功用我不太         懂。 (?!pattern):在任何不匹配pattern的字串開始處往前匹配尋找字串。這功用我不太         懂。效果與前項相反,要集合外的字串才會匹配。 (?<=pattern):在任何匹配pattern的字串開始處往後匹配尋找字串。這功用我不太         懂。效果類似(?=pattern),不過它是找後面到結尾。  (?<!pattern):在任何不匹配pattern的字串開始處往後匹配尋找字串。這功用我不         太懂。效果類似(?!pattern),不過它是找後面到結尾處。  另外,()也能做大包小,如(([0-9])(CD|disc))就會取得三個字串內容,第一順位  是最外面的(()()),再來是([0-9]),末尾則是(CD|disc)。 主「x|y」匹配x或y,也就是匹配一個自定義的集合,如:      bahamudo|uki|kimokimo,就是當字串為bahamudo,uki,kimokimo其中之一 時,都是符合條件的匹配,一般都會配合()使用,否則第一個選項的字串      長度應是無法確定,即(bahamudo|uki|kimokimo),如果不想取得內容,      只是做為過濾訊息的條件使用,就改成(?:bahamudo|uki|kimokimo)。 主「[]」一個集合的匹配,用法有:       [xyz]:內容為自行指定的字元組合,如[1x4a]就只有1x4a任一字能匹配。  [^xyz]:內容為自行指定的非字元組合,如[1 4a]只要非1 4a任一字就能匹配。 [a-z][0-9]:內容為一系列的字元組,[a-z]當然是匹配英文字母組合。        [0-9]就是匹配阿拉伯數字。前方加上^效果就會相反了。  另外,英文字母大小寫是不同字,所以[a-z][A-Z]的範圍不太一樣,[a-z]指 小寫26字母,[A-Z]指大寫26字母。此外,範圍也能限縮調整,[a-c]就限制為 abc三個字母。還能包入數組系列字元及自定義字元組如[a-zB-X_ 巴哈姆特], 範圍函蓋小寫字母a-z,大寫字母B-X,一個下橫線_,一空格,巴哈姆特任一個字。  一般來說,支援正規表示式的程式,在匹配成功的同時,也會將()中的內容一併  暫存起來。讓使用者能進一步去利用。要使用暫存的內容,依()的順序,使用$1  、$2...去使用它們。當然也有一些程式使用其它的萬用字元去呼叫,如:    zMUD(7.21有支援正規表達式)是用%1、%2...%99。  Flexible Renamer則用\1、\2...。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-