2010-03-25 2 views
2

врезались в несколько странной проблемой ... Я хочу, чтобы включить строку:Scite Lua - экранирование правой скобки в регулярном выражении?

а \ левый (B_ {d} \ справа)

в

а \ слева (b_ {д} \ right)

в Scite с использованием сценария Lua.

Итак, я сделал следующий Lua скрипт для Scite:


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 

Может ли кто-нибудь сказать мне, что было бы правильным путем?

Thanks,

Cheers!

ответ

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, Большое спасибо за быстрый ответ! С% as escape в моей первой попытке он совсем не совпадал (т. Е. Часть cln4/"right" не была разнесена). После того, как вы написали, я попробовал еще раз, а затем он сгенерировал ошибку. И затем я, наконец, решил перезапустить Scite, а затем начал работать :) ... – sdaau

+0

... Дело в том, что я установил опцию ext.lua.auto.reload = 1 в свойствах Scite, так что всякий раз, когда a Сценарий lua изменяется + сохраняется, он перезагружается без перезапуска Scite. Это работало для меня по большей части, но, по-видимому, оно кашляло при ошибке во время моей первой неудачной попытки «\\ право», а затем продолжало генерировать ошибки, даже если я использовал% для выхода. В любом случае, рад этому решена. И только для справки, нет необходимости в новой переменной там, может также сделать это как: ... – sdaau

+0

... функция SpaceTexEquations() редактор: BeginUndoAction() местный Сель = редактор: GetSelText() local clnd = sel clnd = string.gsub (clnd, "\\ left% (", "\\ left (") clnd = string.gsub (clnd, "\\ right%)", "\\ справа) «) редактор: ReplaceSel (clnd) редактор: EndUndoAction() конец Так, кажется, Scite обновить/перезагрузить Lua проблема сценария .. Еще раз спасибо - привет! – sdaau

Смежные вопросы