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

私が知らないのは、一致した文字列のみを出力する方法です(投稿されたスニペットのように行全体ではありません)。一致した文字列が強調表示され、それらを抽出できるプロパティが必要であるため、解決策があると思いますが、提供された SciTE バインディングで参照が見つからなかったため、Scintilla の知識が必要だと思います。

すべての正規表現パターン「I \w+」を検索/照合するためのスクリーンショットの例:

ここに画像の説明を入力

強調表示されたすべての文字列部分を出力 (出力ペインに出力) したい

4

1 に答える 1

1

@theta、厄介な質問(少なくとも私にとってはそうでした):)

問題は、Scite GUI の「検索/置換」ダイアログで、バックスラッシュ (たとえば、\s) を使用して一致パターンに 1 つの正規表現構文を使用していることです。一方、Scitelua関数では、パーセント記号 (対応する%s) を使用して、パターンに別の構文を使用します。そこから、次の 2 つの参照があります。

これに対応して、関数のコード ("強調表示されたすべての文字列部分を出力 (出力ペインに出力) する ") は次のようになります。

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 に答える