lua 模式匹配

1

x,y = string.match("hello world", "(%a+)%s*(%1)")
print(x,y)

第一个(%a+)一定会匹配到hello,接着%s*匹配到一个空格,(%1)是第一次的匹配结果,所以是hello,但空格后面并不是hello,所以结果一定不会是hello hello。其实根据模式串可以看出,它匹配的一定是一个(xyz    xyz)这种重复对称的字符串,因此会匹配出L     L(该是小写)。

 

2

x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
     --> x="world hello Lua from"

 

分析模式串,一定是在找一个被空格分隔的两个字符串(但也不一定真的有空格,因为是*号),匹配到之后(2个匹配),交换第一个匹配和第二个匹配。

 

加入是下面的这种情况看,

x = string.gsub("hello", "(%w+)%s*(%w+)", "%2 %1")
----> x = "o hell"

这个会涉及贪婪匹配的问题,第一个匹配会尽可能多的匹配,而第二个匹配至少得有一个字符,因此就会得到这样的结果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值