2011-02-17 7 views
2

現在、次のコードを使用してXmlファイルの一部を解析しています(ファイル全体を1つの文字列に読み込みます)。Luaのパターンと一致する最初の文字列を見つける(XMLパターンマッチング)

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

私が持っている問題は、gmatch関数はMyXmlElementの最初のインスタンスで開始し、最後のインスタンスの閉鎖で終了する単一の文字列を返すので、ループのために一度だけ実行されるということですMyXmlElement。文字列"</MyXmlElement>"の場合は、最初にという文字列が見つかったときに、パターンが一致するように文字列を解析するにはどうすればよいですか?

答えて

8

ここで間違って3点があります。

あなたが最も可能性を一致させるためにあなたがループ
  • で使用したいものを中心に()を使用する必要があるので、文字列からキャプチャしたサブストリングを返しますgmatch
    あなたがパターンとして.-使用すべき文字の数は、単に最初の可能</MyXmlElement>
  • まで行くと、あなたがのために後の変数を必要とする(しかし、私はそれがちょうどタイプミスだと思います)だから、すべて一緒

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

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

  • +0

    これは素晴らしいです!どうもありがとう! –

    +2

    なぜ%s-の代わりに%s +を使用しましたか? ''は、タグ名の後に少なくとも1つのスペースが必要であるため、 ''と一致しません。 であり、MyXmlElementタグと属性のみが一致します。 –

    +0

    良い点。それを属性でのみテストしました。 %s-は実際に私の答えで修正されました。 – jpjacobs

    関連する問題