Scite Lua - 在正则表达式中转义右括号?

sda*_*aau 2 regex lua escaping scite

遇到了一个有点奇怪的问题......我想把字符串:

a\left(b_{d}\right)

进入

\left( b_{d} \right)

在 Scite 中使用 Lua 脚本。

因此,我为 Scite 制作了以下 Lua 脚本:


function SpaceTexEquations()
  editor:BeginUndoAction()
    local sel = editor:GetSelText()

    local cln3 = string.gsub(sel, "\\left(", " \\left( ")
    local cln4 = string.gsub(cln3, "\\right)", " \\right) ")

    editor:ReplaceSel(cln4)
  editor:EndUndoAction()
end
Run Code Online (Sandbox Code Playgroud)

cln3 行工作正常,但是,cln4 崩溃:

 /home/user/sciteLuaFunctions.lua:49: invalid pattern capture
 >Lua: error occurred while processing command
Run Code Online (Sandbox Code Playgroud)

我认为这是因为括号字符 () 在 Lua 中是保留字符;但是,cln3 行如何在不转义的情况下工作?顺便说一下,我也尝试过:

-- using backslash \ as escape char:
local cln4 = string.gsub(cln3, "\\right\)", " \\right) ") -- crashes all the same

-- using percentage sign % as escape chare
local cln4 = string.gsub(cln3, "\\right%)", " \\right) ") -- does not crash, but does not match either
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这样做的正确方法是什么?

谢谢,

干杯!

Fra*_*ham 5

Lua 中正确的转义字符是 %,所以你尝试的应该有效,我刚刚试过

local sel = [[a\left(b_{d}\right)]]
local cln3 = string.gsub(sel, "\\left%(", " \\left( ")
local cln4 = string.gsub(cln3, "\\right%)", " \\right) ")
print (cln4)
Run Code Online (Sandbox Code Playgroud)

并得到

a \left( b_{d} \right) 
Run Code Online (Sandbox Code Playgroud)

所以,当我尝试时,这对我有用,当你尝试时,你得到了什么作为匹配 %