1

重複の可能性:
.LoadXml()を呼び出す前に文字列入力で有効なxmlを確認する方法

私が実装しているプログラムでは、ユーザーは文字列を入力できます。それが有効なxmlである場合は、別の方法で処理する必要があることを特定する必要があります。指定された文字列が有効なxmlであるかどうかを見つけることができる正規表現はありますか?

4

1 に答える 1

3

正規表現の基礎となるプログラム可能なシステムがそれを行うのに十分強力ではないため、括弧のバランスが取れていない文字列から括弧のバランスが取れている文字列を認識する「プレーンな」正規表現を構築することはできません。同じ理由で、整形式の XML *を認識できる正規表現を構築することは理論的に不可能です。

そのような式を構築することが理論的に可能であったとしても、現実的ではありません。レコグナイザーを構築するために必要な作業量は、本格的な XML パーサーを構築するために必要な作業量とほぼ同じです。

幸いなことに、.NET には既にいくつかの XML パーサーが付属しています。このようなコードの一部

bool TryGetValidXml(string s, out XDoxument res) {
    try {
        res = XDocument.Load(s);
        return true;
    } catch {
        res = null;
        return false;
    }
}

トリックを行うでしょう。


* Perl の再帰正規表現や .NETバランシング グループなど、この制限を回避できるさまざまな拡張機能があります。

于 2012-11-21T16:48:12.633 に答える