Preg_Match PHP скрипт не работает

1

Я имею в виду руководство 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';
}

Что я делаю неправильно, могли бы вы посоветовать? Благодарим вас за помощь в продвижении.

  • 0
    Помимо того факта, что HTML не должен обрабатываться с помощью регулярных выражений, согласно API , выражение будет применяться к следующему тексту: file_get_contents("http://phpcodechecker.com/") , который не соответствует предоставленному шаблону ,
  • 1
    Обратите внимание, что регулярное выражение объявлено неправильно, вам нужно удалить " s и добавить [^<]* чтобы разрешить содержимое внутри тега: $regex = '/<script\b.*\bsrc="(.*?)"[^<]*>[^<]*<\/script>/i'; . Тогда есть проблема с file_get_contents , но она уже была описана. Кроме того, $sign должен быть массивом &$matches и у вас есть он объявлен как строка. Посмотрите на синтаксис preg_match .
Показать ещё 1 комментарий
Теги:

2 ответа

0

Вам нужно использовать 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.

  • 0
    Работает ли это для вас?
0

Эта строка:

$site = 'file_get_contents("http://phpcodechecker.com/")';

Должно быть:

$site = file_get_contents("http://phpcodechecker.com/");

Вы сохраняли строку 'file_get_contents("http://phpcodechecker.com/")' вместо фактического запуска file_get_contents.

  • 0
    woops, глупая ошибка, но исправленная, хотя все еще не получая соответствия :(
  • 0
    Спасибо, все отсортировано :) глупая ошибка, сохраняя их в виде строк в переменной вместо того, чтобы позволить им выполнять переменную

Ещё вопросы

Сообщество Overcoder
Наверх
Меню