Lua里的魔法字符包括: 
. % + * - ? [ ] ^ ( ) $ 
可以使用它们对字符串进行模式匹配。 
 
模式符号: 
.        所有字符 
%a        字母 
%c        控制字符 
%d        数字 
%l        小写字母 
%p        标点符号 
%s        空白字符 
%u        大写字母 
%w        字母或数字 
%x        十六进制字符 
%z        内部表示为0的字母 
 
大写形式表示它们的补集,例如%A表示非字母 
 
local s = "Today is 11/10/2016" 
print(string.match(s,"%d")) --1 
print(string.match(s,"%D")) --T 
 
 
修饰符号: 
+        重复1次或多次 
*        重复0次或多次 
-        重复0此或多次 
?        可选部分(重复0次或1次) 
示例: 
 
local s = "Today is 11/10/2016" 
local p = "%d+/%d+/%d+" 
print(string.match(s,p)) --11/10/2016 
 
 
其它符号: 
 
使用[]可以创建字符集,例如: 
 
print(string.match("9 is a number", "[0123456789]")) --9 
并且可以使用-符号来简化它: 
 
print(string.match("9 is a number", "[0-9]")) --9 
 
类似的用法还有: 
 
print(string.match("9 is a number", "[a-nA-N]")) --i 
 
而加上 ^ 表示这个字符集的补集: 
print(string.match("9 is a number", "[^a-nA-N0-9 ]")) --s 
 
使用 () 可以将匹配的值单独捕获: 
local date = "Today is 10/10/2016" 
local p = "(%d+)/(%d+)/(%d+)" 
local d,m,y = string.match(date,p) 
print(d) --10 
print(m) --10 
print(y) --2016 
%加数字表示捕获序号: 
local s = "abcdefg" 
print(string.gsub(s,"(%w)(%w)(%w)","%3%2%1")) --cbafedg 
例如,将日期格式dd/mm/yyyy转换成yyyy-mm-dd 
local s = "Tommorow is 11/10/2016" 
print(string.gsub(s,"(%d+)/(%d+)/(%d+)", "%3-%2-%1")) --Tommorow is 2016-10-11 
 
%加特殊符号 表示该符号的字符: 
local s = "[Date]2016-10-10" 
local p = "[%[%]%-]" 
for w in string.gmatch(s,p) do 
    print(w) 
end 
 
$ 符号表示变量,例如: 
name = "Lua" 
status = "good" 
print(string.gsub("$name is $status", "$(%w+)", _G)) --Lua is good 
 
再例如: 
local tbl = {} 
tbl.name = "Lua" 
tbl.status = "good" 
print(string.gsub("$name is $status", "$(%w+)", tbl)) --Lua is good 
 
 
 
 |