PHP регулярное выражение: получить значение SRC - PullRequest
2 голосов
/ 30 марта 2009

Как мне получить все значения src, используя регулярные выражения в php?

<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>

Полученное значение должно содержать только:

Спасибо.

Ответы [ 5 ]

7 голосов
/ 30 марта 2009

Может быть, это только я, но мне не нравится использовать регулярные выражения для поиска вещей в кусочках HTML, особенно когда HTML непредсказуем (возможно, исходит от пользователя или других веб-страниц).

Как насчет этого:

$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 );

Я не знаю, какова разница в скорости между этим и регулярным выражением, но мне требуется гораздо меньше времени, чтобы прочитать его и понять, что я пытаюсь сделать.

7 голосов
/ 30 марта 2009
/src=(["'])(.*?)\1/

пример:

<?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");

дает:

http://localhost/assets/javascript/system.js
http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c
4 голосов
/ 30 марта 2009

Я согласен с Ником, используйте объект DomDocument для получения ваших данных. Вот версия xpath:

$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;
}
0 голосов
/ 18 октября 2014

Метод jQuery

var Scripts = [];
$('head script').each(function(){
    if($(this).attr('type') == 'text/javascript' && $(this).attr('src')){
        Scripts.push($(this).attr('src'));
    }
});
console.log(Scripts)
0 голосов
/ 30 марта 2009

Если вы решили пойти по регулярному маршруту, это должно быть полезно для вас

/(?<=\<).*?src=(['"])(.*?)\1.*?(?=/?\>)/si
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...