【正则】Lua中的正则表达式

Lua中支持的匹配:

参考资料:
菜鸟教程
博客园:Lua的字符串匹配与正则表达式

元字符描述
.与任何字符配对
%a与任何字母配对
%c与任何控制符配对(例如\n)
%d与任何数字配对
%u与任何大写字母配对A-Z
%l与任何小写字母配对a-z
%p与任何标点配对
%s与空白字符配对
%w与任何字母/数字配对
%x匹配十六进制数字
%z与任何代表0的字符配对
%特殊字符的转义字符例如:%.为匹配点号,%%为匹配百分比符号,跟\"用来转义引号类似
()匹配与返回括号内的内容
[]自定义匹配字符集,例如:"[a-z0-9,%]"匹配a-z、0-9、逗号以及百分比号
+匹配前一字符1次或多次
*匹配前一字符0次或多次,最长匹配
-匹配前一字符0次或多次,最短匹配
?匹配前一字符0次或1次
^匹配字符串开头,例如:"^%d+"为以数字开头的匹配
$匹配字符串结尾,例如:"%d+$"为以数字结尾的匹配

Lua中常用的正则API:

string.gmatch():

返回一个迭代器函数。 每次调用这个函数都会继续以 pattern 对 s 做匹配,并返回所有捕获到的值。

下面这个例子会循环迭代字符串 s 中所有的单词, 并逐行打印:

 local s = "hello world from Lua"
 for w in string.gmatch(s, "%a+") do
     print(w)
 end
--输出hello
--输出world 
--输出from 
--输出Lua

注意pattern是每一次迭代中匹配的正则表达式,若本次匹配返回了多个值,则for循环中也会拿到每个值,如:

local s = "<k1=v1 k2=v2>abc<k4=v4 k5=v5 k6=v6>efg"
for v1,v2 in string.gmatch(s, "<(.-) (.-)>") do
    print('v1=',v1,'v2=',v2)
end
--输出 v1= k1=v1  v2= k2=v2
--输出 v1= k4=v4  v2= k5=v5 k6=v6

上述正则表达式 <(.-) (.-)> 可以理解为捕获以两个尖括号包围的内容,且每次捕获的结果中,都以一个空格隔开,小括号中的点号和减号表示匹配任意字符(最短匹配), 上述字符串s满足这个规则的有两个匹配,所以输出了两次,注意第二次输出时,v2是 k5=v5 k6=v6 因为当前正则表达式只匹配一个空格,多出来的空格就不管了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值