Znajdź wszystko między dwoma znacznikami XML z RegEx

W RegEx chcę znaleźć tag i wszystko pomiędzy dwoma XML tags, Jak poniżej:

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

Chcę znaleźć znacznik i wszystko pomiędzy primaryAddress i usunąć to.

Wszystko pomiędzy znacznikiem primaryAddress jest zmienną, ale chcę usunąć cały znacznik i pod-znaczniki, gdy tylko dostanę primaryAddress.

Ktoś wie jak to zrobić?
Author: Ωmega, 2012-11-06

3 answers

Nie jest dobrym pomysłem używanie regex do parsowania HTML / XML...

Jeśli jednak chcesz to zrobić, poszukaj wzorca regex

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

I zastąp go pustym łańcuchem...

 82
Author: Ωmega,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-05 22:48:55

Powinieneś być w stanie dopasować go do: /<primaryAddress>(.+?)<\/primaryAddress>/

Zawartość pomiędzy znacznikami będzie w dopasowanej grupie.

 14
Author: doublesharp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-05 22:48:07

Może przechwytywać najbardziej oddaloną parę warstw znaczników, nawet z atrybutami w side lub bez znaczników końcowych

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

Edit: jak wspomniano w komentarzu powyżej, regex zawsze nie wystarcza do analizy xml, próbując zmodyfikować regex tak, aby pasował do większej sytuacji, tylko sprawia, że jest dłuższy, ale nadal bezużyteczny

 2
Author: Valen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 09:08:44