XML regex PHP

XML

XML stands for Extensible Markup Language and is used for storing arbitrary data. Usually, it’s not a good thing to parse XML with regular expressions, but in certain situations, it can be very helpful to retrieve (scrape) a specific piece of information that you need.

Extract value between XML tags

One of the most common operations with XML and regex is the extraction of the text between certain tags (a.k.a. scraping). For this operation, the following regular expression can be used.

"/(?:<TAG.*?>)(.*?)(?:<\\/TAG>)/"

Test it!
/(?:<TAG.*?>)(.*?)(?:<\/TAG>)/g

True

False

Enter a text in the input above to see the result

Example code in PHP:

// Extract text between specific XML tag
$extract_xml_pattern = "/(?:<from.*?>)(.*?)(?:<\\/from>)/";
$string_to_match = '<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don\'t forget me this weekend!</body></note>';
preg_match_all($extract_xml_pattern, $string_to_match, $matches);
print_r($matches[1]) // matches[1] is ['Jani']

Test it!

True

False

Enter a text in the input above to see the result

Test it!

True

False

Enter a text in the input above to see the result

Notes on regex XML extraction

While this extraction might be a good option in some cases, usually it’s better to use specific XML parsers for such tasks. In such case, once XML is validated and parsed, the required information can be retrieved using Document queries. For instance, in PHP the following code can be used:

$xml = new SimpleXMLElement("<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>");
echo $xml->xpath("//from")[0]; // prints Jani