Нахождение первой строки, которая соответствует шаблону в Lua (соответствие шаблону XML) - PullRequest
2 голосов
/ 17 февраля 2011

В настоящее время я использую следующий код для анализа части файла XML (сначала я читаю весь файл в одну строку).

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

У меня проблема в том, что цикл forвыполняется только один раз, потому что функция gmatch возвращает только одну строку, которая начинается в первом экземпляре MyXmlElement и заканчивается при закрытии последнего экземпляра MyXmlElement.Как я могу разобрать строку, чтобы шаблон соответствовал всякий раз, когда строка "</MyXmlElement>" является первой найденной (а не только последней строкой)?

1 Ответ

8 голосов
/ 17 февраля 2011

Здесь 3 вещи не так:

  • gmatch возвращает захваченные подстроки из строки, поэтому вам нужно использовать () для всего, что вы хотите использовать в цикле
  • для сопоставления наименьшего возможного количества символов, вы должны использовать .- в качестве шаблона, чтобы идти до первого возможного </MyXmlElement>
  • и вам нужны переменные после for (но я думаю, это просто опечатка)

Итак, все вместе:

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

должен сделать трюк.

...