2

私は LPeg を学ぼうとre moduleしていますが、特に公式ドキュメントが非常に優れているため、非常に興味深い経験でした。

ただし、説明が不十分と思われるトピックがいくつかあります。たとえば、named group capture構造: {:name: p :}.

次の例を考えてみましょう。一致しない理由がわかりません。

print(re.compile
  [[item <- ('<' {:tag: %w+!%w :} '>' item+ '</' =tag '>') / %w+!%w]]
  :match[[<person><name>James</name><address>Earth</address></person>]])

-- outputs nil

ここで何が問題なのかを理解してくれる人はいますか? 私はそれについてかなり考えましたが、何か重要なものが欠けているようです。

4

1 に答える 1

1

これは遅い答えですが、次のパターンを試すことができます

result = re.compile[[
  item <- ({| %s* '<' {:tag: %w+ :} %s* '>' (item / %s* { (!(%s* '<') .)+ }) %s* '</' =tag '>' |})+
]]:match[[
<person>
    <name>
    James
    </name>
    <address>Earth</address>
</person>
]]

これは、テーブル キャプチャを使用して XML を解析し、削除された要素テキストの空白を含みます

tag = "person"
[1] = {
  tag = "name"
  [1] = "James"
}
[2] = {
  tag = "address"
  [1] = "Earth"
}
于 2015-12-26T22:08:55.363 に答える