Lua中string模块如何实现可选的平衡括号匹配功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计306个文字,预计阅读时间需要2分钟。
假设我有以下形式的行:int[4] height; char[50] userName; char[50] userSchool; 如您所见,括号内的表达式是可选的。我能否使用Lua的string.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+))$'))
本文共计306个文字,预计阅读时间需要2分钟。
假设我有以下形式的行:int[4] height; char[50] userName; char[50] userSchool; 如您所见,括号内的表达式是可选的。我能否使用Lua的string.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+))$'))

