Lua 最強大的特性之一就是它的字符串處理能力,它支持字符格式化輸出,具有可擴展的模式匹配查找功能,以及一些實用的字符操作,例如查詢、截取、替換和刪除等字符串操作,這些字符串操作函數(shù)都封裝在一個名為 string 的模塊里。
Lua 里的字符索引是從 1 開始,索引值也可以是負數(shù),這種情況將被解釋成向后索引,從字符串末尾開始算起。
下面是 Lua 5.2 提供的字符串操作函數(shù):
byte
函數(shù) string.byte 把字符串里的第 i 個字符轉為 ASCII 編碼,默認是輸出第一個字符的編碼(只有一個參數(shù)的話),用法:
復制代碼 代碼如下:
string.byte (s [, i [, j]])
例子:
復制代碼 代碼如下:
print(string.byte("abc")) //echo:97
print(string.byte("abc", 2))//echo:98
char
函數(shù) string.char 是把一個 ASCII 編碼轉換為對應的字符,用法:
復制代碼 代碼如下:
string.char (asc1, ...)
例子:
復制代碼 代碼如下:
print(string.char(97)) //echo a
print(string.char(99, 100, 101)) //echo cde
dump
函數(shù) string.dump 返回一個函數(shù)二進制形式的字符串,用法:
復制代碼 代碼如下:
string.dump (function)
參數(shù) function 是一個 Lua 函數(shù):
復制代碼 代碼如下:
function test()
print("just a test")
end
print(string.dump(test))
函數(shù) string.dump 實現(xiàn)了函數(shù)的序列化,函數(shù)可以很輕松的傳遞,并在其他作用域調用。函數(shù) string.dump 出來的二進制字符串,可以用 load 函數(shù)反序列回來直接調用。
復制代碼 代碼如下:
function test()
print("just a test")
end
local sd = string.dump(test)
print(sd)
local ls = load(sd)
print(ls)
ls()
find
函數(shù) string.find 查找字符串 s 里第一個符合查找字符 pattern 的位置,用法:
復制代碼 代碼如下:
string.find (s, pattern [, init [, plain]])
如果找到了目標字符 pattern,則返回它的開始和結束位置:
復制代碼 代碼如下:
start, end = string.find("just a test", "st")
print(start, end)
如果沒有找到,則返回 nil:
復制代碼 代碼如下:
print(string.find("just a test", "dhq.me"))
format
函數(shù) string.format 用于把字符串格式化輸出,用法:
復制代碼 代碼如下:
string.format (formatstring, ···)
string.format 函數(shù)的第一個參數(shù)是用來指定字符串的格式,例如:
復制代碼 代碼如下:
print(string.format("%s is %d", "ten", 10))
上面例子里的 %s 表示字符串,%d 表示數(shù)字,它們是 Lua 的格式化輸出符號。
string.format 函數(shù)的用法跟 C 語言里的 printf 函數(shù)類似,例如它可以像 printf 那樣輸出指定位數(shù)的數(shù)字:
復制代碼 代碼如下:
Pi = 3.1415926
print(string.format("Pi is %.2f", Pi))
Lua 的字符格式化輸出符號列表:
復制代碼 代碼如下:
. 所有字符
%a 字母
%c 控制符
%d 數(shù)字
%D 非數(shù)字
%l 小寫字母
%p 標點符號
%s 字符串
%u 大寫字母
%w 字母數(shù)字
%x 十六進制數(shù)
%z 用 0 表示的字符
gmatch
函數(shù) string.gmatch 會返回一個迭代函數(shù),尅通過該函數(shù)遍歷到一個字符串 s 中所有出現(xiàn)指定匹配模式 pattern 的地方,用法:
復制代碼 代碼如下:
string.gmatch (s, pattern)
例如下面是找出字符串 s 里的所有單詞:
復制代碼 代碼如下:
s = "just a test"
for w in string.gmatch(s, "%a+") do
print(w)
end
gsub
函數(shù) string.gsub 用于全局字符串替換,字符串 s 里滿足匹配模式 pattern 格式的字符都會被替換成 repl 參數(shù)的值,用法:
復制代碼 代碼如下:
string.gsub (s, pattern, repl [, n])
例如:
復制代碼 代碼如下:
print(string.gsub("just a test", "st", "*"))
匹配模式 pattern 可以是一個正則:
復制代碼 代碼如下:
s = "num is 1234567890"
print(string.gsub(s, "%d", "*"))
可在函數(shù)的最后加上一個可選參數(shù) n,表示指定要替換的次數(shù):
復制代碼 代碼如下:
s = "sethook, setlocal, setmetatable, setupvalue, setuservalue"
print(string.gsub(s, "s%a+", "S", 2))
len
函數(shù) string.len 用于返回字符串 s 的長度,用法:
復制代碼 代碼如下:
string.len (s)
例子:
復制代碼 代碼如下:
print(string.len("abcdefg"))
lower
函數(shù) string.lower 用于把字符串 s 里的字母轉為小寫,用法:
復制代碼 代碼如下:
string.lower (s)
例如:
復制代碼 代碼如下:
print(string.lower("AbCdEfG"))
match
函數(shù) string.match 用于查找字符串 s 里第一個匹配對模式 pattern 的值,并返回匹配值,用法:
復制代碼 代碼如下:
string.match (s, pattern [, init])
上面參數(shù) init 是可選, 表示查找過程的起點, 默認從 1 開始:
復制代碼 代碼如下:
print(string.match("just a test", "test"))
參數(shù) patter 可以是一個正則模式:
復制代碼 代碼如下:
t = "today is 2003-5-31"
print(string.match(t, "%d+-%d+-%d+"))
如果 pattern 為空,則返回整個字符串;如果沒匹配成功,則返回 nil。
復制代碼 代碼如下:
print(string.match("abcdabcd", "a"))
rep
函數(shù) string.rep 返回一個由分隔符 sep 隔開的重復(repeat)n 次字符 s 的字符串,用法:
復制代碼 代碼如下:
string.rep (s, n [, sep])
默認的分隔符 sep 是空字符。
復制代碼 代碼如下:
print(string.rep("repeat", 3))
reverse
函數(shù) string.reverse 用于倒轉一個字符串 s 的排序,用法:
復制代碼 代碼如下:
string.reverse (s)
例如:
復制代碼 代碼如下:
print(string.reverse("reverse"))
sub
函數(shù) string.sub 用于從字符串 s 里截取一個從第 i 個字符到第 j 個字符間的子字符串,用法:
復制代碼 代碼如下:
string.sub (s, i [, j])
例如:
復制代碼 代碼如下:
print(string.sub("abcdefg", 2, 5))
參數(shù) i 可以是負數(shù),這種情況下,子串的位置從字符串 s 的最后開始算起:
復制代碼 代碼如下:
print(string.sub("abcdefg", -4, -2))
參數(shù) end 省略的話,則會返回從 i 到字符串末尾的子字符串:
復制代碼 代碼如下:
print(string.sub("abcdefg", 3))
upper
函數(shù) string.upper 用于把字符串 s 里的字母轉為大寫,用法:
復制代碼 代碼如下:
string.upper (s)
例如:
復制代碼 代碼如下:
print(string.upper("AbCdEfG"))
您可能感興趣的文章:- Lua中string.len()使用指南
- Lua中的string庫和強大的模式匹配學習筆記
- Lua loadstring函數(shù)用法實例
- Lua中的loadfile、dofile、loadstring、require用法實例
- LUA string庫使用小結
- Lua中的string庫(字符串函數(shù)庫)總結
- Lua中實現(xiàn)StringBuffer功能
- Lua中字符串(string)淺析
- Lua中string.lower()使用指南