$re = '/<cuepoint(?=.* time="(\d{2}:[0-5]\d:[0-5]\d\.\d{3})")(?=.* type="(\w+)")(?=(?:.* end\-time="(\d{2}:[0-5]\d:[0-5]\d\.\d{3})")?)[^\/]*\/>/m';
$str = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mediacaster version="1.1.0">
<cuepoints>
<cuepoint time="00:00:15.000" type="midroll_1"/>
<cuepoint type="midroll_1" time="00:00:15.000" />
<cuepoint end-time="00:07:36.963" time="00:07:27.194" type="midroll_overlay_1" />
<cuepoint time="00:07:27.194" end-time="00:07:36.963" type="midroll_overlay_1" />
</cuepoints>
</mediacaster>';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php