1

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

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+”的示例屏幕截图:

在此处输入图像描述

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

4

1 回答 1

1

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

问题是在 Scite GUI 的“查找/替换”对话框中,您使用一种正则表达式语法来匹配模式,带有反斜杠(比如,\s);而在 Scitelua函数中,您对模式使用不同的语法,带有百分号(相应地, ) - 请参阅我在Lua 模式匹配与正则表达式%s中的帖子 - 堆栈内存溢出。从那里,你有这两个参考:

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

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

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

于 2012-05-22T11:01:12.737 回答