Либо используйте регулярное выражение и соответствующие классы, либо используйте анализатор HTML. Какой из них вы хотите использовать, зависит от того, хотите ли вы иметь возможность обрабатывать весь веб-сайт или только несколько конкретных страниц, для которых вы знаете макет и с которыми можно проверить.
Простое регулярное выражение, которое соответствует 99% страниц, может быть таким:
// The HTML page as a String
String HTMLPage;
Pattern linkPattern = Pattern.compile("(<a[^>]+>.+?<\/a>)", Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Matcher pageMatcher = linkPattern.matcher(HTMLPage);
ArrayList<String> links = new ArrayList<String>();
while(pageMatcher.find()){
links.add(pageMatcher.group());
}
// links ArrayList now contains all links in the page as a HTML tag
// i.e. <a att1="val1" ...>Text inside tag</a>
Вы можете отредактировать его, чтобы он соответствовал большему количеству, был более совместим со стандартами и т. Д., Но в этом случае вам нужен настоящий парсер.
Если вас интересуют только href = "" и текст между ними, вы также можете использовать это регулярное выражение:
Pattern linkPattern = Pattern.compile("<a[^>]+href=[\"']?([\"'>]+)[\"']?[^>]*>(.+?)<\/a>", Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
И получить доступ к части ссылки с помощью .group(1)
и текстовой части с помощью .group(2)