web-dev-qa-db-ja.com

RegExを使用して2つのXMLタグ間のすべてを見つける

RegExで、次のように、タグと2つのXML tagsの間にあるすべてのものを検索します。

<primaryAddress>
    <addressLine>280 Flinders Mall</addressLine>
    <geoCodeGranularity>PROPERTY</geoCodeGranularity>
    <latitude>-19.261365</latitude>
    <longitude>146.815585</longitude>
    <postcode>4810</postcode>
    <state>QLD</state>
    <suburb>Townsville</suburb>
    <type>PHYSICAL</type>
</primaryAddress>

タグとprimaryAddressの間のすべてを見つけて、それを消去したい。

primaryAddressタグの間はすべて変数ですが、primaryAddressを取得するたびに、タグ全体とサブタグを削除します。

誰もそれを行う方法を知っていますか?

49
Doz

HTML/XML解析に正規表現を使用することはお勧めできません...

ただし、とにかくやりたい場合は、正規表現パターンを検索してください

<primaryAddress>[\s\S]*?<\/primaryAddress>

それを空の文字列に置き換えます...

102
Ωmega

次と一致させることができるはずです:/<primaryAddress>(.+?)<\/primaryAddress>/

タグ間のコンテンツは、一致したグループに含まれます。

15
doublesharp

これにより、属性が横にある場合や終了タグ​​がない場合でも、タグの最も外側のレイヤーペアをキャプチャできます。

(<!--((?!-->).)*-->|<\w*((?!\/<).)*\/>|<(?<tag>\w+)[^>]*>(?>[^<]|(?R))*<\/\k<tag>\s*>)

編集:上記のコメントで述べたように、正規表現は常にXMLを解析するのに十分ではありません。

5
Valen

この方法を使用するのは良くありませんが、本当に正規表現で分割したい場合

<primaryAddress.*>((.|\n)*?)<\/primaryAddress>

検証済みの回答はタグを返しますが、これはタグ間の値を返すだけです。

3
saman