Вытащить текст из title регулярным выражением

Этим кодом я хотел получить текст из title страницы:

preg_match_all('#<title>\w+</title>#', file_get_contents("http://htmlbook.ru/"), $result);
print_r($result);

Но поиск происходит не в title, а в url страницы. Что мне делать?


Ответы (1 шт):

Автор решения: Vladimir Gonchar

Тут проблема не в тексте, поиск происходит как раз по тексту документа. У Вас проблема в самой регулярке.

Если Вы напишете регулярку вот так, результат будет верным, Вы получите заголовок:

preg_match_all('#<title>.*</title>#', file_get_contents("http://htmlbook.ru/"), $result);
print_r($result[0][0]);

\w+ эквивалентно [a-zA-ZА-Яа-я0-9_]+. Т.е эта часть будет искать все соответствующие символы. В заголовке HTMLAcademy появляются ещё | и ., регулярка пропускает заголовок. Других заголовков нет – возвращается пустой массив.
.* (или .+) будет принимать любые символы, значит можно не переживать за то, какой символ будет в заголовке не прочитан.


Также можете написать регулярку как #<title>(.*)</title>#, тогда в $results будете получать как рузультат с тегами, так и чистый заголовок.

→ Ссылка