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 , 返回一個迭代器函數, 每次調用該迭代器函數,返回下一個子串。

 

 

字符串拼接【字符串格式化】

%c - 接受一個數字, 並將其轉化為ASCII碼表中對應的字符 %d, %i - 接受一個數字並將其轉化為有符號的整數格式 %o - 接受一個數字並將其轉化為八進制數格式 %u - 接受一個數字並將其轉化為無符號整數格式 %x - 接受一個數字並將其轉化為十六進制數格式, 使用小寫字母 %X - 接受一個數字並將其轉化為十六進制數格式, 使用大寫字母 %e - 接受一個數字並將其轉化為科學記數法格式, 使用小寫字母e %E - 接受一個數字並將其轉化為科學記數法格式, 使用大寫字母E %f - 接受一個數字並將其轉化為浮點數格式 %g(%G) - 接受一個數字並將其轉化為%e(%E, 對應%G)及%f中較短的一種格式 %q - 接受一個字符串並將其轉化為可安全被Lua編譯器讀入的格式 %s - 接受一個字符串並按照給定的參數格式化該字符串 為進一步細化格式, 可以在%號后添加參數. 參數將以如下的順序讀入: (1) 符號: 一個+號表示其后的數字轉義符將讓正數顯示正號. 默認情況下只有負數顯示符號. (2) 占位符: 一個0, 在后面指定了字串寬度時占位用. 不填時的默認占位符是空格. (3) 對齊標識: 在指定了字串寬度時, 默認為右對齊, 增加-號可以改為左對齊. (4) 寬度數值 (5) 小數位數/字串裁切: 在寬度數值后增加的小數部分n, 若后接f(浮點數轉義符, 如%.nf)則設定該浮點數的小數只保留n位, 若后接s(字符串轉義符, 如%.ns)則設定該字符串只顯示前n位.

  例如

string.format("%c", 83) -- 輸出S string.format("%+d", 17.0) -- 輸出+17 string.format("%05d", 17) -- 輸出00017 string.format("%o", 17) -- 輸出21 string.format("%u", 3.14) -- 輸出3 string.format("%x", 13) -- 輸出d string.format("%X", 13) -- 輸出D string.format("%e", 1000) -- 輸出1.000000e+03 string.format("%E", 1000) -- 輸出1.000000E+03 string.format("%6.3f", 13)   -- 輸出13.000 string.format("%q", "One\nTwo") -- 輸出"One\ --   Two" string.format("%s", "monkey") -- 輸出monkey string.format("%10s", "monkey") -- 輸出 monkey string.format("%5.3s", "monkey") -- 輸出 mon

 

匹配用到的基本模式串  模式匹配函數 string.find, string.gmatch, string.gsub, string.match

.(點): 與任何字符配對 %a: 與任何字母配對 %c: 與任何控制符配對(例如\n) %d: 與任何數字配對 %l: 與任何小寫字母配對 %p: 與任何標點(punctuation)配對 %s: 與空白字符配對 %u: 與任何大寫字母配對 %w: 與任何字母/數字配對 %x: 與任何十六進制數配對 %z: 與任何代表0的字符配對 [數個字符類]: 與任何[]中包含的字符類配對. 例如[%w_]與任何字母/數字, 或下划線符號(_)配對 [^數個字符類]: 與任何不包含在[]中的字符類配對. 例如[^%s]與任何非空白字符配對
當上述的字符類用大寫書寫時, 表示與非此字符類的任何字符配對. 例如, %S表示與任何非空白字符配對.例如,'%A'非字母的字符:

 

轉義字符%
  %轉義字符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
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM