Как получить все значение src с помощью regex в 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>
Полученное значение должно содержать только:
Спасибо.
/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
Может быть, это только я, но мне не нравятся регулярные выражения для поиска вещей в кусках 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 );
Я не знаю, что такое разница в скорости между этим и регулярным выражением, но мне нужно много времени, чтобы прочитать его и понять, что я пытаюсь сделать.
Я согласен с Ником, используйте объект 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; }
Если вы решите пойти по маршруту регулярного выражения, это должно быть полезно для вас
/(?<=\<).*?src=(['"])(.*?)\1.*?(?=/?\>)/si
Метод jQuery
var Scripts = []; $('head script').each(function(){ if($(this).attr('type') == 'text/javascript' && $(this).attr('src')){ Scripts.push($(this).attr('src')); } }); console.log(Scripts)