骗Lua - 在正则表达式中逃脱右支架?

时间:2010-03-25 19:43:33

标签: regex lua escaping scite

陷入一个有点奇怪的问题......我想转动字符串:

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

进入

a \ 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

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

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

谢谢,

干杯!

1 个答案:

答案 0 :(得分: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) 

所以,当我尝试它时,这对我有用,当你尝试%

时,你得到了什么