【问题标题】:Lua REGEX, catch parenthesisLua 正则表达式,抓住括号
【发布时间】:2020-06-14 02:22:26
【问题描述】:

如何从上面的数据中捕获值(r = 32,g = 36,b = 51)?

$color1: rgba(32, 36, 51, 1);

我试试:

v = "$color1: rgba(32, 36, 51, 1);"
id, r, g, b = v.match(v, "%$color(%d+)%:%s+rgba%((%d+)%,%s+(%d+)%,%s+(%d+)%,%s+%d+%)%;") or 0, 0, 0, 0

但不起作用。

【问题讨论】:

  • 以下我们的回答对您有帮助吗?请考虑投票并接受最好的。

标签: regex lua lua-patterns


【解决方案1】:
v = "$color1: rgba(32, 36, 51, 1);"
string.gsub(v, "%((%d+),%s(%d+),%s(%d+)", function(r, g, b) print(r, g, b) end)

输出:32 36 51

Gsub 查找字符串中出现的模式,并将用文本替换文本,或者在这种情况下运行一个函数。 我以%( 开始我的模式,因为我假设您只会在一个看起来总是与您给出的字符串相似的字符串上运行此函数,因此不会出现误报,因此只需从第一个左括号开始。 每个%d+ 找到一个或多个数字,并将其包裹在括号中,以便函数稍后可以找到它。 ,%s 在数字之间找到一个逗号和一个空格。

function(r, g, b) 表示 r、g 和 b 是括号中的第一组、第二组和第三组。

【讨论】:

    【解决方案2】:

    你的 id, r, g, b = v.match(v, "%$color(%d+)%:%s+rgba%((%d+)%,%s+(%d+)%,%s+(%d+)%,%s+%d+%)%;") or 0, 0, 0, 0 行被 Lua 解析为

    id = v:match(pattern) or 0
    r = 0
    g = 0
    b = 0
    

    由于存在匹配,id 变量被设置为捕获组 1 的值,其余部分分配为零。

    您可以使用表格修复此分配:

    result = {string.match(v, "%$color(%d+):%s+rgba%((%d+),%s+(%d+),%s+(%d+),%s+%d+%);")}
    id, r, g, b = result[1] or 0, result[2] or 0, result[3] or 0, result[4] or 0
    

    请参阅Lua demo

    注意;, 不是特殊的 Lua 模式字符,因此我在模式中删除了它们前面的 % 转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多