Lua函数在SciTE中输出匹配的字符串。

我知道如何通过简单地使用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

我不知道如何仅输出匹配的字符串(而不是发布的片段中的整个行)。 我认为有解决方案,因为匹配的字符串已经被突出显示,并且必须具有某些属性才能提取它们,但是我猜Scintilla知识是必要的,因为我在提供的SciTE绑定中找不到任何参考。

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

![enter image description here](https://i.stack.imgur.com/L2rxW.png)

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

原文链接 https://stackoverflow.com/questions/9346979

点赞
stackoverflow用户277826
stackoverflow用户277826

@theta,恶心的问题(至少对我来说):)

问题在于在Scite GUI的“查找/替换”对话框中,您使用一个正则表达式语法来匹配模式,使用反斜线(例如 \s);而在Scite lua函数中,您使用不同的模式语法,使用百分号(相应地,%s)-请参见我在Lua模式匹配与正则表达式-Stack Overflow 中的发布。从那里开始,您有这两个参考:

  • SciTE正则表达式-在Scite GUI的“查找/替换”对话框中使用的正则表达式模式语法

    • 注意,在此处使用\l作为实际字符类(例如\w和其他字符)的替代品!
  • lua-users wiki:模式教程-在Scite中用于lua扩展脚本的正则表达式模式语法

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

function print_marked_lines()

  local sel = editor:GetSelText()

  for mymatch in sel:gmatch"I %w+" do -- 注意;正则表达式匹配!
    print(mymatch)
  end

end

在您的示例文本中,在输出窗格中输出以下内容:

I don
I assume
I guess
I couldn

希望这有所帮助,

干杯!

2012-05-22 11:01:12