【问题标题】:Scite Lua - escaping right bracket in regex?Scite Lua - 在正则表达式中转义右括号?
【发布时间】:2010-03-26 03:55:14
【问题描述】:

碰到了一个有点奇怪的问题……我想把字符串转一下:

a\left(b_{d}\right)

进入

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

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

谢谢,

干杯!

【问题讨论】:

    标签: regex lua escaping scite


    【解决方案1】:

    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) 
    

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

    【讨论】:

    • 您好弗雷泽,非常感谢您的快速回复!使用 % 作为转义符,在我的第一次尝试中,它根本不匹配(即 cln4/"right" 部分根本没有间隔)。你写了之后,我又试了一次,然后它产生了错误。然后我终于决定重新启动 Scite,然后它开始工作:) ...
    • ... 问题是,我在 Scite 属性中设置了选项 ext.lua.auto.reload=1,这样每当更改 + 保存 lua 脚本时,它就会“重新加载”而无需重新启动 Scite。它在大多数情况下对我有用,但显然它在我第一次未转义的“\\right)”尝试时出错了,然后即使我使用 % 转义,它也会继续产生错误。无论如何,很高兴拥有它解决了。仅供参考,上面不需要新变量,也可以这样做:...
    • ... function SpaceTexEquations() editor:BeginUndoAction() local sel = editor:GetSelText() local clnd = sel clnd = string.gsub(clnd, "\\left%(", " \ \left(") clnd = string.gsub(clnd, "\\right%)", "\\right) ") editor:ReplaceSel(clnd) editor:EndUndoAction() end 所以,好像是 Scite refresh/reload Lua脚本问题.. 再次感谢 - 干杯!
    • 啊,有道理。我只是在没有 Scite 的情况下直接在 Lua 中测试了代码(尽管巧合的是,我确实使用 Scite 作为 Lua 脚本的编辑器)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多