字符串
字符串或串(string)是由數(shù)字、字母改淑、下劃線組成的一串字符
有三種方式表達(dá):
單引號的一串字符 ?? string1 = 'Lua'
雙引號間一串字符 ?? string1 = "Lua"
[[和]]間一串字符 ?? string = [["Lua"]]
轉(zhuǎn)義字符
轉(zhuǎn)義字符 含義 ASCII碼值(10進(jìn)制)
\a 響鈴(BEL) 007
\b 退格(BS),將當(dāng)前位置移到前一列 008
\f 換頁(FF),將當(dāng)前位置移到下頁開頭 012
\n 換行(LF),將當(dāng)前位置移到下一行開頭 010
\r 回車(CR),將當(dāng)前位置移到本行開頭 013
\t 水平指標(biāo)(HT),(調(diào)用下一個TAB位置) 009
\v 垂直指標(biāo)(VT) 011
\\ 反斜杠字符"\" 092
\' 單引號 039
\" 雙引號 034
\0 空字符(NULL) 000
\ddd 1到3位八進(jìn)制數(shù)所代表的任意字符 三為八進(jìn)制
\xhh 1到2位十六進(jìn)制所代表的任意字符 二為十六進(jìn)制
字符串操作
--API
string.upper(argument): 字符串全部轉(zhuǎn)為大寫字母
string.lower(argument): 字符串全部轉(zhuǎn)為小寫字母
string.gsub(main String,find String,replace String,num)
在字符串中替換,mainString為要替換的字符串,find String 為被替換的字符,replace String 要替換的字符,num替換次數(shù)(可以忽略,則全部替換)
string.find(str,substr,[init,[end]]) 在指定的目標(biāo)字符串中搜索指定的內(nèi)容(第三參數(shù)為索引),返回其具體位置,不存在則返回nil
string.reverse(arg) 字符串倒序
string.format(...) 類似print格式化字符串
string.char(arg)和string.byte(arg[,int]) char 將整型數(shù)字轉(zhuǎn)成字符并連接,byte轉(zhuǎn)換字符為整數(shù)值(可以指定某一個字符,默認(rèn)第一個)
string.len("String") 計算字符串長度
string.rep("String",n) 返回字符串string的n的拷貝
.. 連接連個字符串
string.gmatch(str,pattern) 回一個迭代函數(shù),每一調(diào)用這個函數(shù),返回一個字符串str找到的下一個符合pattern 描述的子串.如果參數(shù)pattern沒有找到,返回nuil
string.match(str,pattern,init) 只尋找源子串str中的第一個配對,參數(shù)init可選,指定搜尋起點(diǎn),默認(rèn)為1
成功配對到,返回所有配對結(jié)果;如果沒有設(shè)置捕獲標(biāo)記,則返回真?zhèn)€配對字符串,沒有成功返回nil.
字符串格式化
%c 接受一個數(shù)字,轉(zhuǎn)化為ASCII碼
%d,%i 接受一個數(shù)字并將其轉(zhuǎn)化為有符號的整數(shù)格式
%o 接受一個數(shù)字并將其轉(zhuǎn)換為八進(jìn)制的格式
%u 接受一個數(shù)字并將其轉(zhuǎn)化為無符整數(shù)格式
%x 接受一個數(shù)字并將其轉(zhuǎn)化為十六進(jìn)制的格式,使用小寫字母
%X 接受一個數(shù)字并將其轉(zhuǎn)化為十六進(jìn)制的格式,使用大寫字母
%e 接受一個數(shù)字并將其轉(zhuǎn)化為科學(xué)記數(shù)法格式,使用小寫e
%E 接受一個數(shù)字并將其轉(zhuǎn)化為科學(xué)記數(shù)法格式,使用大寫E
%f 接受一個數(shù)字并將其轉(zhuǎn)化為浮點(diǎn)數(shù)格式
%g(%G) 接受一個數(shù)字并將其轉(zhuǎn)化為%e(%E,對應(yīng)的%G)及%f中較短的一種格式
%q 接受一個數(shù)字符串并將其轉(zhuǎn)化為可安全被lua編譯讀入的格式
%s 接受一個字符串并按照給定的參數(shù)格式化該字符串
--細(xì)化格式,參數(shù)如下順序讀入
1):符號:一個+號表示其后的數(shù)字轉(zhuǎn)義符將證書顯示正好,默認(rèn)情況下有負(fù)數(shù)顯示符號
2)占位符:一個0在后面指定了子串寬度啊是占位用,不填是默認(rèn)站位符是空格
3)寬度數(shù)值
4)小數(shù)位/字符串才裁剪:在寬度數(shù)值后增減的小數(shù)部分n,若后接著f(浮點(diǎn)數(shù)轉(zhuǎn)義符,如%6.3f)則設(shè)定該浮點(diǎn)數(shù)的小數(shù)只保留n位,若后接s(字符轉(zhuǎn)義,如%5.3s)則設(shè)定該字符串只顯示前n位
匹配模式
lua中匹配模式直接用常規(guī)的字符串來描述.用于模式匹配函數(shù) string.find, string.gmatch, string.gsub, string.match亮蛔。
單個字符(除 ^$()%.[]*+-? 外): 與該字符自身配對
.(點(diǎn)): 與任何字符配對
%a: 與任何字母配對
%c: 與任何控制符配對(例如\n)
%d: 與任何數(shù)字配對
%l: 與任何小寫字母配對
%p: 與任何標(biāo)點(diǎn)(punctuation)配對
%s: 與空白字符配對
%u: 與任何大寫字母配對
%w: 與任何字母/數(shù)字配對
%x: 與任何十六進(jìn)制數(shù)配對
%z: 與任何代表0的字符配對
%x(此處x是非字母非數(shù)字字符): 與字符x配對. 主要用來處理表達(dá)式中有功能的字符(^$()%.[]*+-?)的配對問題, 例如%%與%配對
[數(shù)個字符類]: 與任何[]中包含的字符類配對. 例如[%w_]與任何字母/數(shù)字, 或下劃線符號(_)配對
[^數(shù)個字符類]: 與任何不包含在[]中的字符類配對. 例如[^%s]與任何非空白字符配對
當(dāng)上述的字符類用大寫書寫時, 表示與非此字符類的任何字符配對. 例如, %S表示與任何非空白字符配對
'%%' 匹配字符 '%'
模式條目可以是:
單個字符類匹配該類別中任意單個字符痴施;
單個字符類跟一個 '*', 將匹配零或多個該類的字符究流。 這個條目總是匹配盡可能長的串辣吃;
單個字符類跟一個 '+', 將匹配一或更多個該類的字符芬探。 這個條目總是匹配盡可能長的串神得;
單個字符類跟一個 '-', 將匹配零或更多個該類的字符偷仿。 和 '*' 不同哩簿, 這個條目總是匹配盡可能短的串;
單個字符類跟一個 '?'酝静, 將匹配零或一個該類的字符节榜。 只要有可能,它會匹配一個形入;
%n全跨, 這里的 n 可以從 1 到 9; 這個條目匹配一個等于 n 號捕獲物(后面有描述)的子串亿遂。
%bxy浓若, 這里的 x 和 y 是兩個明確的字符; 這個條目匹配以 x 開始 y 結(jié)束蛇数, 且其中 x 和 y 保持 平衡 的字符串挪钓。 意思是,如果從左到右讀這個字符串耳舅,對每次讀到一個 x 就 +1 碌上,讀到一個 y 就 -1, 最終結(jié)束處的那個 y 是第一個記數(shù)到 0 的 y浦徊。 舉個例子馏予,條目 %b() 可以匹配到括號平衡的表達(dá)式。
%f[set]盔性, 指 邊境模式霞丧; 這個條目會匹配到一個位于 set 內(nèi)某個字符之前的一個空串, 且這個位置的前一個字符不屬于 set 冕香。 集合 set 的含義如前面所述蛹尝。 匹配出的那個空串之開始和結(jié)束點(diǎn)的計算就看成該處有個字符 '\0' 一樣后豫。
模式:
模式 指一個模式條目的序列。 在模式最前面加上符號 '^' 將錨定從字符串的開始處做匹配突那。 在模式最后面加上符號 '$' 將使匹配過程錨定到字符串的結(jié)尾挫酿。 如果 '^' 和 '$' 出現(xiàn)在其它位置,它們均沒有特殊含義愕难,只表示自身早龟。
捕獲:
模式可以在內(nèi)部用小括號括起一個子模式; 這些子模式被稱為 捕獲物务漩。 當(dāng)匹配成功時拄衰,由 捕獲物 匹配到的字符串中的子串被保存起來用于未來的用途。 捕獲物以它們左括號的次序來編號饵骨。
作為一個特例翘悉,空的捕獲 () 將捕獲到當(dāng)前字符串的位置(它是一個數(shù)字)。