私は以前作成した投稿を見直していましたが、xmlを解析するためにRegexを使用しないことを示唆する多くの人々に気付きました。その場合、XMLは比較的シンプルで、Regexは何の問題も生じませんでした。私は他の多くのコードフォーマットも解析していたので、一貫性のためには意味がありました。しかし、これが他のケースでどのように問題を引き起こすかは私は不思議です。これはちょうど「車輪のタイプの問題を再発明しないでください?なぜ正規表現でXMLを解析するのは悪い考えですか?
答えて
実際の問題はネストされたタグです。ネストされたタグは、正規表現では扱いにくいです。 balanced matchingで可能ですが、それは.NETでのみ利用でき、おそらく他の2つの味です。しかし、バランスの取れたマッチングの力でも、不適切なコメントは潜在的に正規表現を捨てる可能性があります。
例えば、これはあなたが正規表現と時間のためにこのようなエッジの例を追いかけ、そしておそらく解決策を見つけることができ...
<div>
<div id="parse-this">
<!-- oops</div> -->
try to get this value with regex
</div>
</div>
解析するトリッキーなものです。しかし、実際には、XML、XHTML、およびHTMLパーザーがあり、より信頼性高く効率的に仕事を行うことができます。
数字のエンティティまたはDTDディファイメントエンティティをスローして、難しくする必要があります。 – binki
これはここで何度も議論されています。例えば、
Can you provide some examples of why it is hard to parse XML and HTML with a regex?
Why it's not possible to use regex to parse HTML/XML: a formal explanation in layman's terms
ちょうどより多くの答えに、画面の右側にあるリンクをたどります。
私の結論:正規表現はパーサではないので、
シンプル、そのツールがパターンを見つけることができます。
(ht | x)mlファイルで非常に特定のパターンを検索したい場合は、正規表現が最適です。
しかし、すべてのFooタグで何かを検索している場合、パターンが一致しないため、パーサーを使用して、ネストすることができます。もう
XpathはRegex for XMLの一種です。問題は、正規表現は再帰を理解できないということです。 –
@AK_ XPathは一種の正規表現ではありません。 * [XPath](http://en.wikipedia.org/wiki/XPath)は、XML文書*からノードを選択するためのクエリ言語です。それは正規表現とは関係ありません。そして私はあなたが私の答えを理解していることを疑う。問題は、正規表現が再帰を理解しないということではなく、次のことを理解することです:[regular-expression.info参照](http://www.regular-expressions.info/recurse.html)。問題は、(ht | x)mlが非常に異なって見えますが、同じ結果があることです。たくさんの努力(あなたは正規表現で(ht | x)mlを解析することができます)(http://stackoverflow.com/a/4234491/626273)でも、既存のパーサははるかに簡単です – stema
1.何を参照していますか〜は、拡張です。これらはComSciの意味での正規表現ではありません。 2. [this](http://en.wikipedia.org/wiki/Chomsky_hierarchy)と背景の説明をお読みください。正規表現に影響されないxmlドキュメントを作成するのは簡単です。 3.実際に** XPathとXsdを使用することができます** Regexで行うことができるもの、検証のようなもの、ドキュメント内のものを探すもののいくつかについては**です。彼らは....修辞的な意味で似ています:-) –
XMLは正規表現ではありません(専門用語です)。正規表現を使用してXMLを正しく解析することはできません。あなたは99%成功するかもしれませんが、誰かがあなたを投げるXMLを書く方法を見つけるでしょう。
スクリーンスクレーパーのようなものを書いているなら、99%の成功率で十分でしょう。ほとんどのアプリケーションでは、そうではありません。
正規表現は当初は通常の言語のみを扱うように設計されていましたが、現代的な実装にはルックアラウンド、後方参照、時にはバランスのとれたマッチングが含まれています。でも、XMLやhtmlのような複雑なものではまだまだ充分ではありません。 –
私は、正規表現を使ってXMLを解析しようとしたことはありませんでした。 –
私は同意します。私はかつて同じ引数をとったので、正規表現全体を言いたかっただけですが、正規表現を使用して、後で私の間違いを認識しました。 –
- 1. Ruby:equalsが正規表現の正規表現でなぜ解析エラーを引き起こすのですか?
- 2. 正規表現とハイパーリンクを解析する正規表現
- 3. CSS表現を正規表現で解析する
- 4. エスケープ文字で正規表現を解析する正規表現
- 5. 正規表現をHTMLコードから解析するための正規表現
- 6. 正規表現で正規表現の文字列を解析することは可能ですか?
- 7. 正規表現でウェブサイトを解析できない
- 8. 正規表現でFIXプロトコルを解析していますか?
- 9. ASTに正規表現を解析するPythonライブラリですか?
- 10. レール、ルビー - 正規表現を考える - のようなものを考える
- 11. 正規表現で文字列を解析するには?
- 12. 正規表現でJavaでファイル名を解析する
- 13. javascriptの文字列を正規表現で解析する
- 14. Perlの正規表現で名前を解析する
- 15. C#でWikicodeを解析するための正規表現
- 16. 正規表現解析の問題
- 17. PHP、正規表現、解析用のゲームログ
- 18. 正規表現のワーストケース解析
- 19. 正規表現の構文解析
- 20. 正規表現解析の問題
- 21. なぜループの内部は悪い考えですか?
- 22. 正規表現エンジンは再帰的サブパターンで正規表現をどのように解析しますか?
- 23. 正規表現でHTMLテーブルを解析する
- 24. ANTLRでJavaScript正規表現を解析する
- 25. 正規表現字句解析
- 26. 正規表現構文解析Double
- 27. 正規表現VS jQueryのは、このHTMLを考える
- 28. PHPの正規表現を使用してXMLを解析する
- 29. 長いURLを解析する正規表現
- 30. 長い単語を解析する正規表現
おそらく、パーサー_built into_プログラミング言語やGTKなどのフレームワークを含む数千のxmlパーサーが既に存在するためです。 – ApprenticeHacker
@Michaelはリンクを待っています。 – ApprenticeHacker
正規表現を使用して、XMLの小さな予測可能な制限付きスニペットから情報を抽出することができます。問題はありませんが、正規表現は** XML全体を解析することを目的としていません。それは、ボールペンのハンマーを使ってオレンジをはがすのと同じです。 – BoltClock