2010-12-16 6 views
3

エスケープされていないアンパサンドが含まれるXMLデータを処理する必要があり、プロデューサを&にエスケープしたり、CDATAセクションに入れることができません。XMLをクリーンアップする正規表現

&を& ampに置き換える正規表現を探しています。それがエンティティの一部でない場合。 (?!| APOS | QUOT | LT |(アンペアGT);):このような何か&残念ながら

、私のプログラミング環境だけではないオペレータが欠けているように見える "拡張POSIX 1003.2正規表現を"(http://www.kernel.org/doc/man-pages/online/pages/man7/regex.7.htmlを参照)をサポート"!"ここに必要です。

どのように必要な正規表現を工夫するのですか?

+1

正しい「XML-ish」応答は、バリデーターを介してそれを実行し、「整形式ではないXML」として拒否することです。 XMLのデザイナーは、実際の世界では、時には悪い入力を受け止め、それを扱う必要があるという事実を認めていません。 – Spudley

+0

@Spudley:私は実際にバリデーターを通してXMLファイルを実行します。それがどうやって不正な部分に気づいたのですか?残念なことに、無効なXMLを作成しているMicrosoftの製品と「標準」というのは、「オプション」を意味するようです。 –

+0

hehe。 Microsoftええ?その数字。 (商業的サポートは経営幹部がマイクロソフトを買うことにしばしば与える理由であるため、MSはあなたにそれを直す準備ができているのだろうか? – Spudley

答えて

4

水平思考:&ampを持つすべての&は、その後、(例えば)&aposですべて&apos(など)を置き換える置き換えますか?あなたは戻すことが一部をキャプチャするためにグループを使用することができます - &(apos)

0

の代わりにあなたが肯定正規表現、のようなものと一致しない何かを検索することができ、負の正規表現にマッチする何かを探して:

! ... &(?(amp|apos|quot|lt|gt);) 

に私は、あなたがリンクしたページ全体を読んだことはありませんでしたが、それが可能であることを確信しています。