arasındaki her şeyi Özü
4 Cevap php

Ben bir sayfa indirmek için CURL kullanıyorum. Şimdi sayfasından bu ayıklamak istiyorum:

<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="640"
        height="303.33333333333"
        codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab"
        id="object701207571">
    <param name="autoPlay" value="false" />
    <param name="custommode" value="Stage6" />
    <param name="src" value="" />
    <param name="movieTitle" value="Titanic" />
    <param name="bannerEnabled" value="false" />
    <param name="previewImage" 
           value="http://stagevu.com/img/thumbnail/oripmqeqzrccbig.jpg" />
    <embed type="video/divx" src="" width="640" height="303.33333333333"
           autoPlay="false" custommode="Stage6" movieTitle="Titanic"
           bannerEnabled="false"
           previewImage="http://stagevu.com/img/thumbnail/oripmqeqzrccbig.jpg"
           pluginspage="http://go.divx.com/plugin/download/"
           id="embed701207571">
    </embed>
</object>

Lütfen yardım edin!

4 Cevap

Bu kısmen Owens yanıt olduğunu (because I can't put code in a comment very well). Bu regex açılış <object> etiketi içinde özelliklere sahiptir temelde, çünkü, nesne etiketi için işe yaramayabilir. Yerine bunu deneyin:

/(<object[^>]*>)(.*?)(<\/object>)/si

Bu harf duyarsız ve kolay başvuru için üç gruplar halinde kırık bulunuyor. % 100 mükemmel değil, ama yardımcı olmalıdır.

Bu muhtemelen yapmak için yanlış bir şey neden için Can you provide some examples of why it is hard to parse XML and HTML with a regex? bakın.

Yani /(<object>.*?<\/object>)/s gibi bir şey ile kurtulmak mümkün olabilir dedi. Bu "<object>" dize kadar herhangi sayıda karakter tarafından takip dize maçları "</object>". s ucunda (normalde değil) . satırsonlarını maç söyler.

SimpleXML kullanılması:

$sxe = new SimpleXMLElement($xml);
$objects = $sxe->xpath('//object[@id="object701207571"]');
$object = $objects[0];

$params = $object->xpath('param');

foreach($params as $param)
{
    $attrs = $param->attributes();
    echo $attrs['name'] . ' = ' . $attrs['value'] . "\n";
}

// Get plain XML:
echo $object->asXML();

Bu regex açılış ve kapanış etiketleri arasındaki tüm satır sonları maç ve bir grupta tüm şey yakalayacaktır

/(<object[^>]*?>(?:[\s\S]*?)<\/object>)/gi