精華區beta mud_sanc 關於我們 聯絡資訊
Lua 的匹配字元 ┌─┬─────────────────────────────────┐ . 所有字符 %a 字母,包含大小寫。 %c 控制字符,如:ESC、換行等不可視字元大多都是。 %d 數字,0-9,以外的都不是。 %l 小寫字母,大寫字母和非字母都不算。但是%L並不等於%u。 %p 標點符號,只有算單字元的那些,雙字元的都不算。 %s 空白字符。這個還蠻常用的,對非英語語系來說。 %u 大寫字母,小寫字母和非字母都不算。但是%U並不等於%l。 %w 字母和數字字符。 %x 十六進制數字。就當做是0-9加上a-f的集合。 %z 內部表示為0的字符,這個不知何時用到。 └─┴─────────────────────────────────┘ 以上這些都可以單獨使用,去做匹配,除了第一個外,將其它的匹配字元小寫改成大寫,就 會將功能反轉,如:%a 代表所有字母;而%A就是非字母。%c是匹配所有控制字元,%C就是 所有非控制字元。 另外,還有一些加強匹配效果的字元,有點主詞+形容詞的味道: ( ) % + - * ? [ ] ^ $ ():用來補獲符合條件的字串內容,如果要將它做為匹配的條件之一,請在前方加上%。 %:轉義字元,用來告訴程式後面的字元,是字串的一部份,還是匹配用的字元,但本身就   是特殊用途的字元,加上它,就變成一般的字元。如果需要匹配%,為了讓它變一般的字   元,在前方加上%。如有一個字串'100%',要寫出符合條件的表達式,像這樣:   %d+%,因為末尾的%尚未被轉義,會視為跟第一個%相同作用,造成表達式本身錯誤,正  確要這麼寫%d+%%。 +:它是一種後綴字元,用來設定匹配字元的長度條件,表示這個匹配字元有多長,+代表1   個或更多,如%d+,代表這組數字至少為一位數,它匹配:"12","0","324567546"...等   。 -:同上,但條件為0或更多,跟*不同的地方是-為最少匹配,*為最多匹配。如:   print(string.match(1234567890,"(%d+)(%d+)"))   前方的%d+會取到能讓表達式匹配成功的極限,得結果:123456789和0   print(string.match(1234567890,"(%d-)(%d+)")) 前方的%d-即使不取值,也能匹配,將所有數值都讓給%d+,得:""和1234567890 ""不代表它匹配失敗,它有取到值,不是nil print(string.match(1234567890,"(%d*)(%d+)")) 前方的%d*會取到能讓表達式匹配成功的極限,得結果:123456789和0 *:同上,但條件為0或更多,其它前一條講完了。 ?:條件是0或1個。模式是最大匹配,跟*相同,只是當?佔先手時,最也多取一位數,*佔先  手時,會取到讓後手滿足匹配的最底限為止。 []:是一個集合,你可以把你要匹配的內容放進去,但要記住,它匹配的長度依然是一個字 元,要設定匹配的長度,請加"*","+","-","?",如:   [0-9]:匹配數字,相等於%d [0-9a-z]:匹配數字和英文字母小寫。 [-a-z]:匹配"-"和英文字母小寫。 [%d%a]:匹配英數字,等同%w。 [%d\n]:匹配數字和換行。 ^:前綴,為匹配字元加上開頭限定的條件。但如在[]裡的開頭,就變成反集合。如:  [\n]匹配換行字元,[^\n]匹配換行字元以外的字元。 $:後綴,為匹配字元加上末尾限定的條件,但要注意看不到的字元,如'\n','\r'可能會影 響結果。