preg_match внутри preg_match - PullRequest
       4

preg_match внутри preg_match

1 голос
/ 26 января 2012

Я использую следующий preg_match для получения тега [title] веб-страницы.

// get <title>
$search = "/\<title\>(.*)\<\/title>/i";
preg_match($search, $url_contents, $result);
$title = $result[1];

Теперь я хочу искать внутри этого тега [title], поэтому я написал это:

// search for $keyword
$keyword_slash = "/". $keyword ."/";
preg_match_all($keyword_slash, $title, $result);
print_r($result); // just for testing

Я добавил $ keyword_slash, потому что иначе он дал мне ошибку.Тем не менее, это не работает.Он всегда возвращает пустой массив, хотя я знаю, что ключевое слово $ находится внутри [title].

1 Ответ

3 голосов
/ 26 января 2012

Ваш regx первый preg_match, похоже, не прав. Должно быть:

$search = "~<title>([^<]*)</title>~i";

Однако я должен напомнить вам, что извлечение заголовка с использованием регулярного выражения, подобного этому, чрезвычайно подвержено ошибкам , и вам следует рассмотреть возможность использования DOM-парсера для получения этого.

Обновление: Вот предлагаемый анализ DOM для заголовка страницы:

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($content);
$xpath = new DOMXPath($dom);
$title = $xpath->query("//head/title")->item(0)->nodeValue;
printf("title=[%s]\n", $title);
...