Я хочу извлечь содержимое тега title из строки html. Я сделал поиск, но до сих пор я не могу найти такой код в VB/C# или PHP. Также это должно работать как с верхним, так и с нижним регистром, например. должен работать как с <title></title>
, так и с < TITLE></TITLE>
. Спасибо.extract title tag from html
ответ
Звучит как работа для регулярного выражения. Это будет зависеть от корректности HTML-кода, т. Е. Только элемент заголовка внутри элемента head.
Regex regex = new Regex(".*<head>.*<title>(.*)</title>.*</head>.*",
RegexOptions.IgnoreCase);
Match match = regex.Match(html);
string title = match.Groups[0].Value;
У меня нет моей регулярки шпаргалки передо мной, так что, возможно, потребуется немного настройки. Обратите внимание, что в случае, если элемент заголовка не существует, проверка ошибок также отсутствует.
«Звучит как работа для ... Более-регулярного выражения!» Разработчик днем, супергерой ночью;) – Piskvor
RE: «Хорошо сформированный» - вам не нужно помещать элемент '
Даже хуже, чем сойканг правильно указывает, существует много полезных HTML-файлов с недопустимым заголовком. например
Вы можете использовать регулярные выражения для этого, но это не является полностью защищенным от ошибок. Это будет делать, если вы просто хотите что-то простое, хотя (в PHP):
function get_title($html) {
return preg_match('!<title>(.*?)</title>!i', $html, $matches) ? $matches[1] : '';
}
Похоже, что эта функция чувствительна к регистру, эта функция не извлекает заголовок, если она в верхнем регистре, можете ли вы изменить эту функцию, чтобы игнорировать случай? – 2009-04-05 17:35:41
Флаг «i» после шаблона делает регистр нечувствительным к регистру. – cletus
Если есть атрибут в тег заголовка (что маловероятно, но может случиться), вам необходимо обновить выражение следующим образом:
$title = preg_match('!<title.*>(.*?)</title>!i', $url_content, $matches) ? $matches[1] : '';
HTML не является, в общем, хорошо сформированным. Поэтому любое решение будет иметь ошибки. Какие случаи ошибок приемлемы для вас? –
Я думаю, что он должен игнорировать случай и отсутствовать тег заголовка из документа. Возможно, наилучшим образом это должна быть функция, возвращающая значение заголовка строки или пустую строку, если отсутствует метка ошибки или заголовка. – 2009-04-05 17:26:07