web-dev-qa-db-fra.com

Trouver tout ce qui se trouve entre deux balises XML avec RegEx

Dans RegEx, je veux trouver la balise et tout le reste entre deux XML tags, comme suit:

<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>

Je veux trouver la balise et tout ce qui est entre primaryAddress et l'effacer. 

Tout ce qui se trouve entre la balise primaryAddress est une variable, mais je veux supprimer la balise entière et les sous-balises chaque fois que je reçois primaryAddress.

Quelqu'un a une idée de comment faire ça?

41
Doz

Ce n'est pas une bonne idée d'utiliser regex pour l'analyse HTML/XML ...

Cependant, si vous voulez quand même le faire, recherchez le motif regex 

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

et remplacez-le par une chaîne vide ...

92
Ωmega

Vous devriez pouvoir le faire correspondre avec: /<primaryAddress>(.+?)<\/primaryAddress>/

Le contenu entre les balises sera dans le groupe correspondant.

15
doublesharp

cela peut capturer la paire de balises la plus externe, même avec un attribut dans le côté ou sans balises de fin

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

edit: comme mentionné dans le commentaire ci-dessus, regex n'est toujours pas suffisant pour analyser XML, essayer de modifier la regex pour l'adapter à plus de situations ne fait que le rendre plus long mais toujours inutile

3
Valen

Il n’est pas bon d’utiliser cette méthode, mais si vous voulez vraiment la scinder avec regex

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

la réponse vérifiée renvoie les balises, mais cela ne fait que renvoyer la valeur entre les balises.

0
saman