【问题标题】:Lua function to output matched strings in SciTELua 函数在 SciTE 中输出匹配的字符串
【发布时间】:2012-03-09 23:00:01
【问题描述】:

我知道如何通过简单地使用 editor:MarkerNext() 来输出匹配字符串的行(来自 find 命令的结果):

function print_marked_lines()

    local ml = 0
    local lines = {}

    while true do
        ml = editor:MarkerNext(ml, 2)
        if (ml == -1) then break end
        table.insert(lines, (editor:GetLine(ml)))
        ml = ml + 1
    end

    local text = table.concat(lines)
    print(text)

end

我不知道如何只输出匹配的字符串(而不是与发布的 sn-p 一样的整行)。我认为有解决方案,因为匹配的字符串被突出显示并且必须具有一些允许提取它们的属性,但我想需要 Scintilla 知识,因为我在提供的 SciTE 绑定中找不到任何参考。

查找/匹配所有正则表达式模式“I \w+”的示例截图:

我想输出(打印到输出窗格)所有突出显示的字符串部分

【问题讨论】:

    标签: lua scintilla scite


    【解决方案1】:

    @theta,讨厌的问题(至少对我来说是这样):)

    问题在于,在 Scite GUI“查找/替换”对话框中,您使用一种正则表达式语法来匹配模式,带有反斜杠(例如,\s);而在 Scite lua 函数中,您对模式使用不同的语法,带有百分号(相应地,%s) - 请参阅我在 Lua pattern matching vs. regular expressions - Stack Overflow 中的帖子。从那里,你有这两个参考:

    相应地,您的函数的代码(“输出(打印到输出窗格)所有突出显示的字符串部分”)将是:

    function print_marked_lines()
    
      local sel = editor:GetSelText()
    
      for mymatch in sel:gmatch"I %w+" do -- note; a regex match!
        print(mymatch)
      end
    
    end
    

    从您的示例文本中将其输出到输出窗格中:

    I don
    I assume
    I guess
    I couldn
    

    希望这会有所帮助,
    干杯!

    【讨论】:

    • 感谢您的精彩回答。不幸的是,这意味着了解另一种模式语法——Lua 的。恕我直言 editor:findtext(regex) 应该被使用,并且匹配的行被额外解析为闪烁指标——那是我不知道该怎么做的事情。 OTOH,在我提出问题后的一段时间,SciTE 引入了 strip dialog,这使得许多事情变得容易:scintilla.org/SciTELua.html(在页面底部描述)。例如这里是包装sh 并使用grep 完成上述工作的屏幕截图:i.imgur.com/XogF9.png
    • 现在正在阅读链接页面,似乎editor:match(text, [flags]) generator 是最简单的方法
    猜你喜欢
    • 2020-11-14
    • 2011-03-29
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2021-06-11
    • 2021-06-07
    相关资源
    最近更新 更多