Lua 學習筆記(六) —— 字符串操作

字號:


    定義
    略
    例子
    x = string.match("1001 is a Robot","001") print(x) --> 001 x = string.match("1001 is a Robot","%d%d") print(x) --> 10
    string.gmatch(s,pattern)
    返回一個迭代函數(shù),該函數(shù)每執(zhí)行一次,就返回下一個捕捉到的匹配(如果沒有使用捕捉,就返回整個匹配結果)。
    例子
    for s in string.gmatch("I have a Dream.","%a+") do print(s) end --> I --> have --> a --> Dream
    t = {} s = "name=tangyikejun, number=20250001" -- 將捕獲的兩個子串分別作為鍵和值放到表t中 for k, v in string.gmatch(s, "(%w+)=(%w+)") do t[k] = v end -- 輸出表t for k,v in pairs(t) do print(k,v) end --> name tangyikejun --> number 20250001
    string.format(formatstring,...)
    返回格式化之后的字符串。
    定義
    略
    例子
    string.format("My name is %s", "tangyikejun") --> My name is tangyikejun
    string.len(s)
    返回字符串長度
    string.lower(s)
    返回小寫字母的字符串
    string.upper(s)
    返回大寫字母的字符串
    string.rep(s,n)
    對字符串進行重復
    定義
    string.rep([字符串],[重復次數(shù)])
    例子
    string.rep("Hello",4) -- HelloHelloHelloHello
    string.reverse(s)
    返回反轉后的字符串。
    string.sub(s,i[,j])
    返回子字符串。
    定義
    string.sub([字符串],[開始字符下標],[結束字符下標]=-1)
    例子
    x = string.sub("tangyikejun",7) print(x) --> kejun x = string.sub("tangyikejun",1,-6) print(x) --> tangyi
    string.gsub(s,pattern,repl[,n])
    根據(jù)模式匹配對字符串中每一個匹配部分都做替換處理,返回替換后的字符串。
    定義
    string.gsub([字符串],[模式匹配],[替換字符],[最大替換次數(shù)] = 無限制)
    repl 參數(shù)([替換字符])支持 字符串、表、函數(shù)。
    如果 repl 是字符串,那么該字符串就是用于替換的字符串。同時支持 %n 轉義符操作,n 的范圍是 0-9。n 范圍為 [1,9] 時表示第 n 個捕獲的匹配字符串,%0 表示整個匹配的字符串,%% 表示替換為一個 %。
    如果 repl 是表,那么將捕獲的第一個字符串作為鍵值(Key)進行查詢(沒有定義捕捉則以整個匹配的字符串為鍵值),查到的值作為替換的字符串。
    如果 repl 是函數(shù),那么每次匹配成功都會調(diào)用該函數(shù),并以按序以所有捕捉作為參數(shù)傳入函數(shù)。沒有捕捉則以整個匹配的字符作為參數(shù)。
    如果從表或函數(shù)得到是字符串或者是數(shù)字,就將其用于替換;如果得到的是 false 或 nil,那么匹配部分將不會發(fā)生變化。
    例子
    repl 為字符串
    s = "Never say die." x = string.gsub(s,"die","never") --> Never say never. x = string.gsub(s,"die","'%0'") --> Never say 'die'. x = string.gsub(s,"(%a+)%s%a+%s(%a+)","%2") --> die.
    限制最大替換次數(shù)
    s = "never say never." x = string.gsub(s,"never","Never",1) --> Never say never.
    repl 是表
    t = {name="Lua",version="5.1"} x = string.gsub("$name-$version.tar.gz","$(%a+)",t) --> Lua-5.1.tar.gz
    repl是函數(shù)
    x = string.gsub("4+5 = $return 4+5$","%$(.-)%$",function(s)return loadstring(s)() end) --> 4+5 = 9 x = string.gsub("23+45=$result", "((%d+)%+(%d+)=)%$%a+", function (s,a,b) sum = a+b return s..sum end) --> 23+45=68
    ~~注意:似乎只支持匿名函數(shù)。~~
    從表或函數(shù)返回的是 false 或 nil
    x = string.gsub("4+5 = $return 4+5$","%$(.-)%$",function(s)return nil end) --> 4+5 = $return 4+5$ t = {name="Lua",version=false} x = string.gsub("$name-$version.tar.gz","$(%a+)",t) --> Lua-$version.tar.gz
    string.byte(s[,i[,j]])
    返回字符的 ASCII 碼值。
    定義
    string.byte([字符串],[起始下標]=1,[結束下標]=[起始下標])
    例子
    x,y,z = string.byte("abc",2) --> 98 nil nil x,y,z = string.byte("abc",1,3) --> 97 98 99
    string.char(...)
    根據(jù)傳入的 ASCII 編碼值([0-255])得到對應的字符,傳入多少編碼值就返回多長的字符串。
    例子
    x = string.char(98,99,100) --> bcd
    如果輸入字符超限會編譯報錯。
    string.dump(function)
    返回函數(shù)的二進制表示(字符串形式),把這個返回值傳給 loadingstring 可以獲得函數(shù)的一份拷貝(傳入的函數(shù)必須是沒有上值的 Lua 函數(shù))。
    例子
    function sum(a,b) return a + b end s = string.dump(sum) x = loadstring(s)(4,4) -- 8