Первое, что я вижу, что потерпит неудачу:
width="100%" will not match /width=\"[0-9]*\"/
Я не знаю точного определения PHP регулярного выражения;Но я не уверен, что это будет совпадать (пробел в выражении reg может совпадать с нулем или большим количеством пробелов в целевом тексте, но наоборот не сработает):
> <param will not match (probably) /><param/
Как вы видите, разборXML с регулярными выражениями сложен и подвержен ошибкам.
Что вы действительно хотите сделать, так это использовать синтаксический анализатор XML SAX.
Попробуйте: PS Мой PHP не очень хорош, поэтому он может содержать ошибки.
PS.Длинные URL не были правильно закодированы для XML.Я использовал urlencode () здесь, чтобы остановить сообщения об ошибках.Я не проверял, имеет ли это смысл.
<?php
$test = '<object height="81" width="100%">'
.'<param name="movie" value="'
.urlencode('http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Ftheshiverman%2Fsummer-beats-july-2010&secret_url=false')
.'">'
.'</param>'
.'<param name="allowscriptaccess" value="always">'
.'</param>'
.'<embed allowscriptaccess="always" height="81" src="'
.urlencode('http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Ftheshiverman%2Fsummer-beats-july-2010&secret_url=false')
.'" type="application/x-shockwave-flash" width="100%">'
.'</embed>'
.'</object>';
function JustPrint($parser,$data)
{
print $data;
}
function OpenTag($parser,$name ,$attribs)
{
// For special tags add a new attribute.
if (strcasecmp($name, "object") == 0)
{
$attribs['Martin'] = 'York';
}
// Print the tag.
print "<$name ";
foreach ($attribs as $loop => $value)
{
print "$loop=\"$value\" ";
}
print ">\n";
}
function CloseTag($parser,$name)
{
print "<$name/>\n";
}
$xmlParser = xml_parser_create();
xml_set_default_handler($xmlParser ,'JustPrint' );
xml_set_element_handler($xmlParser, 'OpenTag' , 'CloseTag' );
xml_parse($xmlParser, $test);
?>