天天看點

lua mysql 字元串截取_lua string 下的函數

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