Разбор HTML-строки в Java с помощью регулярных выражений - PullRequest
0 голосов
/ 04 ноября 2011

Нужна помощь в разборе html-строки

String str = "<div id=\"test\" ><a href=\"#aaaa\"> Amrit </a> </div><div><a href=\"#bbbb\" > Amrit </a> </div><a href=\"#cccc\" ><a href=\"#dddd\" >";
String reg = ".*(<\\s*a\\s+href\\s*=\\s*\\\"(.+?)\"\\s*>).*";

str - моя примерная строка и reg - мое регулярное выражение, используемое для анализа всех тегов привязки, особенно значения href.Используя это регулярное выражение, он показывает только последнюю часть строки.

    Pattern MY_PATTERN = Pattern.compile(reg);
    Matcher m = MY_PATTERN.matcher(str);
    while (m.find()) {
        for(int i=0; i<m.groupCount(); i++){
            String s = m.group(i);
            System.out.println("->" + s);
        }
    }

Это код, который я сделал.Чего не хватает?

А также, если я хочу, чтобы конкретное вхождение строки было заменено, как правило, если я изменил свой URL, изменил форму [string] _ [string] на [string] - [string].Как я могу получить "_" и заменить его на "-"?

Ответы [ 3 ]

2 голосов
/ 04 ноября 2011

Вместо анализа html с использованием регулярных выражений (регулярное выражение для обычного языка - HTML является не обычным языком ), используйте HtmlUnit

http://htmlunit.sourceforge.net/

Это может помочь: Параметры для очистки HTML?

0 голосов
/ 17 мая 2012

Я бы предложил использовать JSoup.Это может быть гораздо более гибким, чем использование регулярных выражений.Пример кода приведен ниже.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ListLinks {

    public static void main(String[] args) throws Exception {
        String url = "http://www.umovietv.com/EntertainmentList.aspx";
        Document doc = Jsoup.connect(url).get();
        Elements links = doc.select("a[href]");
        for (Element link : links) {
            print("%s", link.attr("abs:href"));
        }
    }

    private static void print(String msg, Object... args) {
        System.out.println(String.format(msg, args));
    }
}

Подробнее см. http://jsoup.org/.

0 голосов
/ 04 ноября 2011

Похоже, у вас есть двойной выход слишком много.
Этот сегмент может исправить это: "<\\s*a\\s+href\\s*=\\s*\"(.+?)\"\\s*>", но не может комментировать
для всего регулярного выражения, если оно работает или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...