加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

string – Lua中可选的平衡括号捕获

发布时间:2020-12-14 21:45:41 所属栏目:大数据 来源:网络整理
导读:假设我有以下形式的行: int[4] heightchar cchar[50] userName char[50+foo("bar")] userSchool 如您所见,括号内的表达式是可选的. 我可以使用Lua的string.match()解析这些字符串吗? 以下模式适用于包含括号的行: line = "int[4] height"print(line:match
假设我有以下形式的行:

int[4] height
char c
char[50] userName 
char[50+foo("bar")] userSchool

如您所见,括号内的表达式是可选的.

我可以使用Lua的string.match()解析这些字符串吗?

以下模式适用于包含括号的行:

line = "int[4] height"
print(line:match('^(%w+)(%b[])%s+(%w+)$'))

但是有一种模式可以处理可选的括号吗?以下不起作用:

line = "char c"
print(line:match('^(%w+)(%b[]?)%s+(%w+)$'))

可以用另一种方式编写模式来解决这个问题吗?

解决方法

与正则表达式不同,?在Lua模式中匹配单个字符.

你可以使用or运算符来完成这样的工作:

line:match('^(%w+)(%b[])%s+(%w+)$') or line:match('^(%w+)%s+(%w+)$')

它的一个小问题是Lua只保留表达式中的第一个结果.这取决于您的需求,使用if语句或者您可以像这样给整个字符串第一次捕获

print(line:match('^((%w+)(%b[])%s+(%w+))$') or line:match('^((%w+)%s+(%w+))$'))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读