lua -- string.match/string.gmatch详解

1.string.match 模式匹配

string.match(str, pattern, pos)

第一个参数指定目标字符串,每二个参数指定查找模式串。第三个参数可选指定开始位置
这个函数与string.find很象。但不会返回匹配的开始位置与结束位置。而仅仅是返回找到的字符串。
如果在模式串中用圆括号指定的匹配分组,则返回值有多个分别对应各个匹配分组的捕获结果。
分组可以相互嵌套,捕获结果返回的顺序对应模式串中匹配分组的左圆括号出现的前后顺序。
如果你希望第一个返回值是匹配结果的完整字符串,那么请将整个模式串包含在一对圆括号内。

var v,v2 = string.match("abcd", "(ab)(cd)");
io.print(v,v2); //>显示v等于"ab" v2等于"cd"

如果不显示的用括号指定捕获,函数将捕获整个匹配模式。

//\d表示数字 \d+表示最长匹配多个数字
var v = string.match("abcd1234", "\d+");
io.print(v); //>显示v等于"1234"

2.string.gmatch 全局模式匹配

func = string.gmatch(str, pattern)
string.gmatch()创建并返回一个迭代器,可用于for语句中迭代的进行全局查找。
迭代器每执行一次返回一个找到的字符串,如果在模式串中用圆括号指定的匹配分组,
则返回值有多个分别对应各个匹配分组的捕获结果。分组可以相互嵌套,捕获结果返
的顺序对应模式串中匹配分组的左圆括号出现的前后顺序。如果你希望第一个返回值
是匹配结果的完整字符串,那么请将整个模式串包含在一对圆括号内。

strHtmlCode = http.get("http://www.aardio.com") 
string.gmatch 全局查找子串,每个括号指定的一个分组匹配(对应一个分组捕获,在泛型for中增加一个返回值)
与 string.match 不同,string.gmatch发现一个完整匹配以后,会继续向后查找,
pattern = //\s*href\s*=\s*\"?\'?([:\w\./@]+)\"?\'?\s*
for href in string.gmatch(strHtmlCode, pattern) {
我们解释一下模式串 "\s*href\s*=\s*\"?\'?([:\w\./@]+)\"?\'?\s*"
\是转义符 
\s表示空白字符
 \s*表示空白字符出现一次或多次 
\"表示引号
( \转义符的使用与普通字符串相同 )
?表示出现一次或零次
 \w表示字母和数字
\.表示.(因为.是特殊字符,所以需要\还原)
[]是一个自定义的字符类,如[0-9]匹配所有数字 
+是修饰符表示前面的字符出现一次或多次
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值