Регулярное выражение Java для извлечения заголовка страницы - PullRequest
2 голосов
/ 28 марта 2012

Я пытаюсь извлечь заголовок страницы из страниц HTML и XML.Это регулярное выражение, которое я использую:

Pattern p = Pattern.compile(".*<head>.*<title>(.*)</title>.*</head>.*");

Проблема в том, что он извлекает только заголовок из файлов HTML и дает мне ноль для файлов XML.Может ли кто-нибудь помочь мне изменить регулярное выражение для получения заголовков страниц XML?

Код:

content= stringBuilder.toString(); // put content of the file as a string
Pattern p = Pattern.compile(".*<head>.*<title>(.*)</title>.*</head>.*");
Matcher m = p.matcher(content);
while (m.find()) {
    title = m.group(1);
}

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Как сказано выше, регулярные выражения не подходят для анализа XML и HTML. Однако в некоторых случаях это пригодится, поэтому вот что должно работать:

Pattern p = Pattern.compile("<head>.*?<title>(.*?)</title>.*?</head>", Pattern.DOTALL); 
Matcher m = p.matcher(content);
while (m.find()) {
    title = m.group(1);
}

Если вы используете Matcher, нет необходимости ставить .* до и после (так как они не являются частью какой-либо группы). Вы также можете посмотреть на неохотный квалификатор (то есть *? вместо *, +? вместо + и т. Д.), Если это не так. Наконец, вы также должны использовать флаг Pattern.DOT_ALL, иначе точка не соответствует символу конца строки

1 голос
/ 03 апреля 2014

OMG .. Регулярные выражения для этого? Как насчет следования (например, для удаления части тела)

StringBuilder sb = new StringBuilder();
sb.append(html, html.indexOf("<body>") + 6, html.lastIndexOf("</body>"));
String headless = sb.toString();
System.out.println(headless);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...