Lua 中的匹配模式直接用常规的字符串来描述。 它用于模式匹配函数 string.find, string.gmatch, string.gsub, string.match。
你还可以在模式串中使用字符类。
字符类指可以匹配一个特定字符集合内任何字符的模式项。比如,字符类 %d 匹配任意数字。所以你可以使用模式串 **%d%d/%d%d/%d%d%d%d** 搜索 dd/mm/yyyy 格式的日期:
.(点) |
与任何字母配对 |
%a |
与任何字母配对 |
%c |
与任何控制符配对(例如\n) |
%d |
与任何数字配对 |
%l |
与任何小写字母配对 |
%p |
与任何标点(punctuation)配对 |
%s |
与空白字符配对 |
%u |
与任何大写字母配对 |
%w |
与任何字母/数字配对 |
%x |
与任何十六进制数配对 |
%z |
与任何代表0的字符配对 |
[] |
与任何[]中包含的字符类配对. 例如[%w]与任何字母/数字, 或下划线符号()配对 |
() |
与任何[]中包含的字符类配对. 例如[%w]与任何字母/数字, 或下划线符号()配对 |
^ |
与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对 |
* |
将匹配零或多个该类的字符。 这个条目总是匹配尽可能长的串; |
+ |
将匹配一或更多个该类的字符。 这个条目总是匹配尽可能长的串; |
- |
将匹配零或更多个该类的字符。 和 ‘*’ 不同, 这个条目总是匹配尽可能短的串; |
? |
将匹配零或一个该类的字符。 只要有可能,它会匹配一个; |
正则匹配替换 |
string.gsub(mainString,findString,replaceString,num) |
mainString |
要操作的字符串 |
findString |
被替换的字符 |
replaceString |
要替换的字符 |
num |
替换次数(可以忽略,则全部替换) |
local r1,r2=string.gsub("我爱中国","中国","美女",1)
print( r1,r2)
local r1,r2=string.gsub("ab123cd","%d","456",1)
print( r1,r2)
正则匹配查找 |
string.find (str, substr, [init, [plain]]) |
str |
指定的目标字符串 |
substr |
搜索指定的内容 |
init |
指定了搜索的起始位置,默认为 1,可以一个负数,表示从后往前数的字符个数。 |
plain |
表示是否使用简单模式,默认为 false,true 只做简单的查找子串的操作,false 表示使用使用正则模式匹配。 以下实例查找字符串 “Lua” 的起始索引和结束索引位置: |
local r1,r2=string.find("我爱中国","中国",1,true)
print( r1,r2)
local r1,r2=string.find("ab123cd","%d",1)
print( r1,r2)
正则匹配字符 |
string.match(str, pattern, init) |
str |
源字串 |
pattern |
匹配内容 |
init |
指定搜寻过程的起点, 默认为1。 |
local r1=string.match("我爱中国","中国",1)
print(r1)
local r1=string.find("ab123cd","%d",1)
print(r1)
正则匹配**迭代器** |
string.gmatch(str, pattern) |
str |
源字串 |
pattern |
匹配内容 |
local str=""ab123cd123cd123cd123cd"
for v in string.gmatch(str,"%d+") do
print(v)
end