2011-09-15 10 views

答えて

0

正規表現は、XMLがの一部である言語のクラスを扱うことができません。しかし、これを行うためのハック方法はもちろんあります:

  • あなただけのidName="something"のために一致する可能性 - 等号と引用符を含む - とただしidName="somethingelse"

と交換し、このコースのは、上記の正確な文字列がXML要素の本文にテキストとして表示されないことが確実である場合にのみ機能します。この場合、実際には適切なXMLパーサーの周りにつながる方法はありません。

現代の正規表現は通常の言語よりも多くのことを扱うことができますが、扱うことができるのはそれだけです。 XMLを解析するには、文脈自由文法が必要です。

0

私は理想的な世界では、適切なXMLパーサーを使用することに同意します。

しかし、世界は理想的ではなく、正規表現が必要な場合はこれを処理できます。ここで はperlの/ sedので動作します例ですが、どのLANGに変換するのは簡単でなければなりません:

s/<node idName="employee">(.*?)<\/node>/<node idName="supervisor">$1<\/node>/g 

これは、簡単に他の属性を含むように変更することができ、それはこのように気にいらになります:

s/<node (.*?idName=)"employee"(.*?)>(.*?)<\/node>/<node $1"supervisor"$2>$3<\/node>/g 

XMLに大きなチャンクが含まれている場合は、メモリが不足していることに注意してください。

+0

私はこれを最善の方法として勧告しているわけではありませんが、これは部分的にfgysinの答えに対する応答です。パーザはあなたにとってはあまりにも複雑であることが判明したため、あるいは別の理由で正規表現を特に必要としているため、パーザを使用することを考えなかったため、正規表現としてタグ付けしているかどうかは分かりません。いずれにせよ、少なくともこれは動作します;) – sillyMunky

関連する問題