php regex: src değerini almak

4 Cevap php

Nasıl php regex kullanarak tüm src değerini almak mı?

<script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>
<script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>

Alınan değer sadece içeriyor olmalıdır:

Teşekkür ederim.

4 Cevap

Belki sadece bana, ama ben HTML (belki de bir kullanıcı veya diğer web sayfalarından gelir) öngörülemeyen özellikle, HTML adet şeyler bulmak için düzenli ifadeler kullanarak sevmiyorum.

Nasıl böyle bir şey hakkında:

$doc =
<<<DOC
    <script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>
    <script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>
DOC;

$dom = new DomDocument;
$dom->loadHTML( $doc );

$elems = $dom->getElementsByTagName('*');

foreach ( $elems as $elm ) {
    if ( $elm->hasAttribute('src') )
        $srcs[] = $elm->getAttribute('src');
}

print_r( $srcs );

Ben hız farkı bu ve düzenli bir ifade arasında ne olduğunu bilmiyorum ama bana okumak ve ben yapmaya çalışıyorum ne olduğunu anlamak için çok daha az zaman bir halt alır.

/src=(["'])(.*?)\1/

Örnek:

<?php

$input_string = '<script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>';
$count = preg_match('/src=(["\'])(.*?)\1/', $input_string, $match);
if ($count === FALSE) 
    echo('not found\n');
else 
    echo($match[2] . "\n");

$input_string = "<script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>";
$count = preg_match('/src=(["\'])(.*?)\1/', $input_string, $match);
if ($count === FALSE) 
    echo('not found\n');
else 
    echo($match[2] . "\n");

verir:

http://localhost/assets/javascript/system.js
http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c

Ben, Nick katılıyorum verilerinizi almak için DomDocument nesne kullanın. Burada bir xpath versiyonu:

$doc =
<<<DOC
    <script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>
    <script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>
DOC;

$doc = new DomDocument;
$doc->loadHTML($doc);

$xpath = new DomXpath($doc);
$elements = $xpath->query('//[@src]');

foreach($elements as $element)
{
    echo $element->nodeValue;
}

Eğer regex rota gitmek karar verirseniz, bu sizin için yararlı olacaktır

/(?<=\<).*?src=(['"])(.*?)\1.*?(?=/?\>)/si