Как использовать регулярные выражения в PHP для извлечения ссылки на карту сайта из файла robots.txt? - PullRequest
0 голосов
/ 18 февраля 2012

Я хочу проанализировать файл robots.txt и извлечь ссылку на карту сайта.Предполагая, что файл выглядит примерно так:

stuff
foobar
Sitemap: http://www.cgdomestics.co.uk/sitemap.xml
hello world
more stuff

Я пытаюсь использовать регулярные выражения для извлечения именно этого;

http://www.cgdomestics.co.uk/sitemap.xml

Пока у меня есть этот код PHP;

<?php
  $robots_url = "http://www.cgdomestics.co.uk/robots.txt";
  $robots_file = file_get_contents($robots_url);
  $pattern = "/Sitemap: .*/";
  $i = preg_match($pattern, $robots_file, $match);
  echo $match[0];
?>

Вывод вышеприведенного:; 1011 *

Sitemap: http://www.cgdomestics.co.uk/sitemap.xml

, но я хочу, чтобы он выводил только;

http://www.cgdomestics.co.uk/sitemap.xml

Могу ли я использовать регулярное выражение для возврата именно того, что хочумне нужно сделать еще один шаг, чтобы удалить часть "Sitemap:"?Или есть лучший способ сделать это?

Как вы, вероятно, можете сказать, что я нечастый пользователь PHP и регулярных выражений.

Спасибо.

Найджел

Ответы [ 3 ]

1 голос
/ 18 февраля 2012

Установить подшаблон и взять его из массива совпадений

<?php
  $robots_url = "http://www.cgdomestics.co.uk/robots.txt";
  $robots_file = file_get_contents($robots_url);
  $pattern = "/Sitemap: ([^\r\n]*)/";
  $i = preg_match($pattern, $robots_file, $match);
  echo $match[1];
?>
1 голос
/ 18 февраля 2012

Используйте группу (подшаблон) для URL, затем обратитесь к этому индексу подшаблона (в данном случае 1):

  $pattern = "/Sitemap: (.*/)";
  $i = preg_match($pattern, $robots_file, $match);
  echo $match[1]; /*First parenthesized subpattern */

Из документов: $ match [1] будет иметьтекст, соответствующий первому захваченному заключенному в скобки подшаблону .Смотри: http://php.net/manual/en/function.preg-match.php

0 голосов
/ 18 февраля 2012
preg_match('/Sitemap: ([^\n]*)\n$/',file_get_contents($url),$matches);

print_r($matches);

Что это даст вам?

...