Lua 转义字母的模式匹配问题

Lua pattern matching problem with escaped letter

我已经有一个规则 \ 应该替换为 \\ , 所以现有的代码是

string.gsub(s, '\', '\\\\')

但有些数据不应该转换,例如abc\"cba,将被替换为abc\\"cba

如何限制只有\后面没有"可以替换,比如


'abc\abc' -> 'abc\\abc'

'abc\"abc' -> 'abc\"abc'

我使用过 \[^\"]-\[^\"]+- 等模式,但其中 none 有效。

谢谢

您可以使用

string.gsub((s .. ' '), '\([^"])', '\\\\%1'):sub(1, -2)

查看在线演示:

local s = [[abc\abc abc\"abc\]];
s = string.gsub((s .. ' '), '\([^"])', '\\\\%1'):sub(1, -2)
print( s );
-- abc\\abc abc\"abc\\

备注:

  • \([^"]) - 匹配两个字符,一个 \ 然后是 " 字符以外的任何一个字符(捕获到第 1 组)
  • \\\\%1 - 用 4 个反斜杠和第 1 组
  • 中捕获的值替换每个匹配项的替换模式
  • (s .. ' ') - space 附加在输入字符串的末尾,以便模式可以使用 " char
  • 以外的 char
  • :sub(1, -2) - 删除最后添加的“技术”space。