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