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。
我已经有一个规则 \
应该替换为 \\
, 所以现有的代码是
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。