Lua语法小贴士(三)魔法字符

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

参考:

Lua语法小贴士(一)字符串基础操作

Lua语法小贴士(二)string库

Lua语法小贴士(三)魔法字符

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值