4

私は次のような文字列を解析しようとしています: &1 first &2 second &4 fourth \\、そしてそれからテーブルを構築する

t = {1=first, 2=second, 4=fourth}

私は一般的に正規表現の経験があまりないので、私の素朴な試み(\\今のところとテーブルの部分を無視して)は

local s = [[&1 first &2 second &4 fourth \\]]

for k,v in string.gmatch(s, "&(%d+)(.-)&") do
    print("k = "..k..", v = "..v)
end

これは、キャプチャされた 2 つのペアが表示されることを期待していたときに、最初にキャプチャされたペアのみを提供します。私はいくつかの読書をしてlpegライブラリを見つけましたが、私にはあまりなじみがありません. ここはlpeg必要ですか?誰かが私のエラーを説明できますか?

4

2 に答える 2

1

値が 1 つの単語であることがわかっている場合、これは機能するはずです。

string.gmatch(s, "&(%d+)%s+([^%s&]+)")

「&」に続いて 1 つ以上の数字 (キャプチャ)、1 つ以上のスペース、1 つ以上の非スペースおよび非 & の文字 (キャプチャ) が続きます。

于 2013-06-13T21:24:18.670 に答える