2

現在、次のコードを使用して Xml ファイルの一部を解析しています (最初にファイル全体を 1 つの文字列に読み取りました)。

for xmlMatch in xmlString:gmatch("<MyXmlElement.*</MyXmlElement>") do
    -- Do something.
end

私が抱えている問題は、gmatch 関数が MyXmlElement の最初のインスタンスで始まり、MyXmlElement の最後のインスタンスの終了で終わる単一の文字列のみを返すため、for ループが 1 回しか実行されないことです。"</MyXmlElement>"文字列が最初に見つかったとき (最後のケースのみではなく)にパターンが一致するように、文字列を解析するにはどうすればよいですか?

4

1 に答える 1

9

ここには 3 つの問題があります。

  • gmatch は文字列からキャプチャされた部分文字列を返すため、ループで使用したいものを () で囲む必要があります
  • 可能な限り最小の文字数に一致させるために、.-可能な限り最初の文字までパターンとして使用する必要があります</MyXmlElement>
  • forの後に変数が必要です(しかし、それは単なるタイプミスだと思います)

だから一緒に:

for att,cont in XmlString:gmatch'<MyXmlElement%s*(.-)>(.-)</MyXmlElement>' do
    -- something
end

トリックを行う必要があります。

于 2011-02-17T10:03:49.870 に答える