. 任意字符
%a 字母
%c 控制字符
%d 數(shù)字
%l 小寫(xiě)字母
%p 標(biāo)點(diǎn)字符
%s 空白符
%u 大寫(xiě)字母
%w 字母和數(shù)字
%x 十六進(jìn)制數(shù)字
%z 代表0的字符
上面字符類(lèi)的大寫(xiě)形式表示小寫(xiě)所代表的集合的補(bǔ)集末秃。例如, '%A'非字母的字符:
特殊字符
'%' 用作特殊字符的轉(zhuǎn)義字符
'%.' 匹配 .
'%%' 匹配字符 '%'
用'[]'匹配字符集中的字符一次
'[%w_]' 匹配字母數(shù)字和下劃線(xiàn)
'[01]' 匹配二進(jìn)制數(shù)字
'[%[%]]'匹配一對(duì)方括號(hào)
在'[]'中使用連字符'-'
'%d' 表示 '[0-9]'隐孽;
'%x' 表示 '[0-9a-fA-F]'
'[0-7]' 表示 '[01234567]'
在'[]'開(kāi)始處使用 '^' 表示其補(bǔ)集:
'[^0-7]' 匹配任何不是八進(jìn)制數(shù)字的字符领舰;
'[^\n]' 匹配任何非換行符戶(hù)的字符神年。
'[^%s]' == '%S'
模式修飾符
^ 匹配字符串開(kāi)頭
$ 匹配字符串結(jié)尾
+ 匹配前一字符1次或多次
* 匹配前一字符0次或多次,最長(zhǎng)匹配
- 匹配前一字符0次或多次,最短匹配
? 匹配前一字符0次或1次
查找
string.find(s, pattern [, init [, plain]])
s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
init : 搜索的起始位置
plain : 默認(rèn)為false哼凯,true時(shí)關(guān)閉匹配正則模式
將查找目標(biāo)模板在給定字符串中出現(xiàn)的位置,找到返回起始和結(jié)束位置猿涨,沒(méi)找到返回nil
- 注:find 的第二個(gè)參數(shù)使用了某種匹配模式雷蹂, 并且模式串里面帶括號(hào),那么表示會(huì)“捕捉”括號(hào)括起來(lái)的模式匹配到的字符串溯乒,并且作為返回值冒萄,從第三個(gè)返回值開(kāi)始返回所有匹配
print(string.find("hello, world", "%s", 2))
=> 7 7
print(string.find("hello, world", "%s", 8)
=> nil
print(string.find("hello, world", "%s", 0, true)
=> nil
print(string.find("hello, world", " ", 0, true))
=> 7 7
-- 其中%1表示拷貝匹配到的第一個(gè)內(nèi)容,同樣的%n來(lái)拷貝匹配到的第n個(gè)內(nèi)容
print(string.find("abc \"it's a cat\"", "([\"'])(.-)%1"))
=> 5 16 " it's a cat
string.match(s, pattern [, init])
s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
init : 搜索的起始位置
將查找目標(biāo)模板在給定字符串中出現(xiàn)的匹配字符橙数,如果沒(méi)有尊流,返回nil
print(string.match("hello, world", "%S%s%S"))
=> , w
print(string.match("hello, world", "%S%s%S", 8))
=> nil
print(string.match("hello, world", "(hello), world"))
=> hello
注:如果pattern中有用()起來(lái)的,那么只返回()中的內(nèi)容,如果多個(gè)括號(hào)灯帮,返回多個(gè)值
print(string.match("hello, world", "(hello), (world)"))
=> hello world
-- 其中%1表示拷貝匹配到的第一個(gè)內(nèi)容崖技,同樣的%n來(lái)拷貝匹配到的第n個(gè)內(nèi)容
print(string.match("abc \"it's a cat\"", "([\"'])(.-)%1"))
=> " it's a cat
string.gmatch (s, pattern)
s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
返回一個(gè)迭代器函數(shù),每一次調(diào)用這個(gè)函數(shù)钟哥,返回一個(gè)在字符串s找到的下一個(gè)符合pattern描述的子串迎献。
local str = "hello, world"
local iter = string.gmatch(str, "%S")
for w, v in iter do
print(w)
end
=>
h
e
l
l
o
,
w
o
r
l
d
替換
string.gsub (s, pattern, repl [,m])
s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
repl : 需要替換成的字符串
[, m] : 只看s的前m個(gè)字符
將pattern中匹配到的字符串替換成repl字符串,repl可以是string腻贰,也可以是個(gè)函數(shù)吁恍,或是table,如果是函數(shù)播演,就會(huì)用捕獲的內(nèi)容作為參數(shù)調(diào)用該函數(shù)冀瓦,將返回的內(nèi)容作為替換字符串。如果是table写烤,則用捕獲的內(nèi)容為key去取table的值來(lái)作為替換字符串,如果不存在翼闽,就不做替換
返回值 : 替換后的字符串, 替換的次數(shù)
- 注:把源字符串當(dāng)做gsub的第一個(gè)參數(shù)傳入后洲炊,方法執(zhí)行并不會(huì)修改源字符串感局,需要重新賦值接收才能獲取到修改后的字符串
local str = "hello, world"
print(string.gsub(str, "hello", "hi"))
=> hi, world 1
local str = "hello, world"
print(string.gsub(str, ".", function(pattern)
if pattern == "l" then
return "abc"
end
return pattern
end))
=> heabcabco, worabcd 12
function expand(s)
return string.gsub(s, "$(%w+)", _G)
end
name = "Lua"; status = "great"
print(expand("$name is $status, isn't it?"))
=> Lua is great, isn't it? 2