2010-03-25 77 views
2

撞上了一个有些奇怪的问题......我想将字符串:Scite Lua - 在正则表达式中转义右括号?

一个\左(B_ {d} \右)

一个\左(B_ {d} \ right)

in Scite使用Lua脚本。

所以,我为赛特以下的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 

的CLN3线工作正常,但是,cln4崩溃,并:

/home/user/sciteLuaFunctions.lua:49: invalid pattern capture 
>Lua: error occurred while processing command 

我觉得这是因为括号字符()是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 

有谁能告诉我什么是正确的方法来做到这一点?

谢谢,

干杯!

回答

4

Lua中正确的转义字符%,那么你尝试过什么应该工作,我只是想

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

,并得到

a \left(b_{d} \right) 

所以,这个工作对我来说,当我试了一下,当您尝试时,您获得了什么样的匹配结果%

+0

Hi Fraser, 非常感谢您的快速响应! 用%作为转义,在我的第一次尝试中,它根本不匹配(即cln4 /“right”部分根本没有间隔)。在你写完之后,我又试了一次,然后它产生了一个错误。然后我终于决定重新启动Scite,然后它开始工作:) ... – sdaau 2010-03-25 20:11:01

+0

...事情是,我已经在Scite属性中设置了选项ext.lua.auto.reload = 1,以便每当lua脚本被改变+保存,它“重新加载”而不必重新启动Scite。它在很大程度上为我工作,但显然它在我第一次非转义的“\\ right”尝试期间发生了错误,然后继续发生错误,即使我使用%来转义。任何情况下,都很乐意拥有它解决了。 而且仅作参考,不需要一个新的变量在那里,也可以不喜欢它:... – sdaau 2010-03-25 20:12:42

+0

... 功能SpaceTexEquations() 编辑:BeginUndoAction() 本地SEL =编辑:GetSelText()clnd = sel clnd = string.gsub(clnd,“\\ left%(”,“\\ left(”) clnd = string.gsub(clnd,“\\ right%)”,“\\右)“) 编辑:ReplaceSel(CLND) 编辑:EndUndoAction() 结束 所以,似乎是赛特刷新/重载的Lua脚本问题.. 再次感谢 - 欢呼! – sdaau 2010-03-25 20:14:11