Lua:返回“{foo}{bar}”的内容

对于像 "{foo}{bar}" 这样的字符串,有一个简单的方法来获取它们的内容:

str = "{foo}{bar}"
first, second = str:gmatch(...)...

应该得到 first="foo"second="bar"

问题在于 foo 本身可能有一些括号,例如:

str = "{foo {baz}{bar}" 

因此 first = "foo {baz"bar 部分只有字母数字字符,没有括号。

点赞
用户3832970
用户3832970

你可以使用

first, second = str:match('{([^}]*)}%s*{([^}]*)}')

查看Lua在线演示

str.match函数将找到并返回第一个匹配项,由于有两个捕获组,因此在有效匹配时会返回两个值。

该模式意味着:

  • { - 一个{字符
  • ([^}]*) - 第一组:除}之外的任意0个字符
  • } - 一个 }字符
  • %s* - 0个或更多空格 (非必要的,但是有点额外的)
  • {([^}]*)} - 与上面相同,只是这里定义了第二组。
2018-10-05 07:56:16