lua gsub %b <-- 这是怎么工作的?

在下面的 Lua 代码中:

function interp(s, tab)
  return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end))
end

%b 表示匹配“括号对”(暂时不考虑 {}、[] 的差别)。

那么这个正则是如何匹配类似 "${name}" 的内容呢?它匹配到的是 "${" 开始," }" 结束的内容,并将整个括号对作为替换的对象。函数中的 tab[w:sub(3, -2)] or w 表示如果 tab 中找到了 ${xxx} 对应的替换值,则进行替换;否则不替换(即返回原内容)。

原文链接 https://stackoverflow.com/questions/2761260

点赞
stackoverflow用户148870
stackoverflow用户148870

%bXY 匹配以 X 开头且以 Y 结尾的字符序列。因此,%b{} 匹配大括号 {......} 中间的任何字符。

在你的示例代码中,整体模式首先匹配 $ 字符,然后是 {,任意数量的字符,最后是 }

2010-05-03 21:18:22