Я имею в виду руководство PHP и другие сайты для его создания, но, похоже, не может заставить его работать, даже если я проверил источник сайта, который содержит ссылку на внешний XML файл jQuery от Google, поэтому нужно найти совпадение.
Я проверил регулярное выражение, чтобы убедиться, что он правильно подбирает ссылки на скрипты в HTML, но он просто не хочет сопоставлять его с знаком $ Sign Signments, который, я надеюсь, будет соответствовать.
$regex = "/<script.+src=\"(.+)\"><\/script>/i";
$site = file_get_contents("http://phpcodechecker.com/");
$sign = 'jquery';
$sign = 'jQuery v2.1.3';
if (preg_match($regex, $site, $sign)) {
echo 'A match was found.';
} else {
echo 'A match was not found. boo boo';
}
Что я делаю неправильно, могли бы вы посоветовать? Благодарим вас за помощь в продвижении.
Вам нужно использовать DOMDocument для анализа HTML. Вот как вы можете легко получить то, что вам нужно вместе с DOMXpath:
$html = <<YOUR_HTML>>;
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$scripts = $xpath->query('//script[@src]');
foreach($scripts as $script) {
echo $script->getAttribute('src') . PHP_EOL;
}
См. Демонстрацию
Обратите внимание, что регулярное выражение неправильно объявлено, вам нужно удалить "
и добавить [^<]*
чтобы разрешить содержимое внутри тега: $regex = '/<script\b.*\bsrc="(.*?)"[^<]*>[^<]*<\/script>/i';
может работать, но регулярное выражение здесь не является правильным инструментом. Тогда возникла проблема с file_get_contents
(никаких котировок не было). Кроме того, $sign
должен быть массивом &$matches
и вы объявили его как строку. Посмотрите на синтаксис preg_match.
Эта строка:
$site = 'file_get_contents("http://phpcodechecker.com/")';
Должно быть:
$site = file_get_contents("http://phpcodechecker.com/");
Вы сохраняли строку 'file_get_contents("http://phpcodechecker.com/")'
вместо фактического запуска file_get_contents
.
file_get_contents("http://phpcodechecker.com/")
, который не соответствует предоставленному шаблону ,"
s и добавить[^<]*
чтобы разрешить содержимое внутри тега:$regex = '/<script\b.*\bsrc="(.*?)"[^<]*>[^<]*<\/script>/i';
. Тогда есть проблема сfile_get_contents
, но она уже была описана. Кроме того,$sign
должен быть массивом&$matches
и у вас есть он объявлен как строка. Посмотрите на синтаксис preg_match .