lua的字元串操作
lua的字元串絕大部分的操作 都可以用 string 庫函數接口操作,隻是因為lua的特性,在比對操作上會有些不一樣,這個文末會說一點。
另外 lua 的字元串是 從 下标 1 開始的,不是 0 開始。
函數操作:
1. 計算字元串長度
例如:string.len("abcd"); ----> 4
2. 傳回字元串 s 的 n 個拷貝
例如:string.rep("abcd",2) ----> abcdabcd
3. 傳回字元串的全部大寫
例如:string.upper("AbcD") ----> ABCD
4. 傳回字元串的全部小寫
例如:string.lower("AbcD") ----> abcd
5. 字元串的拼接【字元串的格式化操作】
例如:string.format("the value is:%d",4) ----> the value is:4
6. 根據下标截取字元串 這個下标是取的 閉區間長度 ,string.sub(info, index, endindex)
例如:string.sub("abcd",2) ----> bcd
string.sub("abcd",-2) ----> cd
string.sub("abcd",2,-2) ----> bc
string.sub("abcd",2,3) ----> bc
7. 在字元串中查找string.find()
原型:string.find (s, pattern [, init [, plain]])
解釋:函數在字元串s裡查找第一個和參數pattern比對的子串,如果找到了一個比對的子串,就會傳回這個子串的起始索引和結束索引,否則就會傳回nil。
另外,參數init作為一個數字,指定了搜尋的起始位置,這個數字預設為1可以一個負數,表示從後往前數的字元個數。
參數plain作為第四個可選參數預設為flase,傳入參數true表示關閉模式比對,是以函數隻做簡單的查找子串的操作,
如果子串pattern沒有字元為空字元串""将會被認為是魔法字元。
如果模式比對子串被找到了,一個成功被找到的子串将會作為第三個傳回值,放在兩個索引傳回值的後邊而傳回。
如果 pattern 比對模式是 帶有 (...) 就是有括号這種,是捕獲組形式,那find函數會傳回比對到的 字元串 。
比如: a,b,str = string.find('qwe123', '(%a+)') ----> 1 3 qwe
如果是完全的字元串查找,沒有正則比對,例如: string.sub("abcd",2) ----> bcd
string.sub("abcd",-2) ----> cd
string.sub("abcd",2,-2) ----> bc
string.sub("abcd",2,3) ----> bc
8. 在字元串中查找并替換string.gsub(mainString,pattern,replaceString,num)
在字元串中替換。mainString 為要操作的字元串, pattern為被替換的字元,replaceString 要替換的字元,num 替換次數(可以忽略,則全部替換)
例如:string.gsub("abcdabcd","a","z"); ----> zbcdzbcd 2
string.gsub("aaaa","a","z",3); ----> zzza 3
9. 傳回字元串的ASCII碼string.byte()
例如:string.byte("ABCD",4) ----> 68
10. 将ASCII碼變成 字元串string.char()
例如:string.char(97,98,99,100) ----> abcd
11. 分割字元串string.split(要分割的字元串, 分隔符)
例如:local result = string.split("1,2,3", ",") ----> result = {"1", "2", "3"}
12. 字元串反轉 string.reverse(s)
例如:string.reverse("jayden") ----> nedyaj
13. 字元串比對string.match (s, pattern)
它不同于函數string.find()要傳回比對字元的索引,也不同于string.gmatch()函數會傳回一個疊代函數可以取到所有的比對項,
這個函數它僅僅範回第一個比對,簡單易用,往往在一些實際應用中找到第一個比對就夠了,我們一起來看一下用法。
原型:string.match(s, pattern [, init])
解釋:在字元串s中查找滿足參數pattern的比對子串,如果找到了一個比對就傳回這個比對子串,若沒找到則傳回nil,如果參數pattern沒有指定比對參數,則傳回整個比對字元串,另外,一個數字形參數init用來指定查找字元串的其實位置,這個參數預設為1,當然也可以設定為負數,即-n表示從字元串尾部向前數n個字元開始查找。
pattern 可以 是 正則比對 字元串,那 這個函數傳回的就是 能比對到的 字元串。
match_ret = string.match(ehre99wj=--=-*-/4mdqwl\0ds123fef, "%d%d%d") ---> 123
14. 字元串比對疊代傳回 string.gmatch (s, pattern)
比對字元串s中的pattern , 傳回一個疊代器函數, 每次調用該疊代器函數,傳回下一個子串。
字元串拼接【字元串格式化】
例如
比對用到的基本模式串 模式比對函數 string.find, string.gmatch, string.gsub, string.match
轉義字元%
%轉義字元string.find("abc%..","%%")4 4
string.find("abc..d","%.%.")4 5
用"()"進行捕獲
()捕獲字元串string.find("12ab","(%a%a)")3 4 ab
string.find("ab12","(%d%d)")3 4 12
模式修飾符
+表示1個或多個,比對最多個string.find("aaabbb","(a+b)") 1 4 aaab
string.find("cccbbb","(a+b)") nil
-表示0個或多個,比對最少個string.find("zzxyyy","(xy-)") 3 3 x
string.find("zzzyyy","(x-y)") 4 4 y
*表示0個或多個,比對最多個string.find("mmmnnn","(m*n)")1 4 mmmb
string.find("lllnnn","(m*n)") 4 4 n
?表示0個或1個 string.find("aaabbb","(a?b)") 3 4 ab
string.find("cccbbb","(a?b)") 4 4 b