Соответствие регулярному выражению больше, чем должно

1

Я делаю это:

List<String> listOfLinks = new ArrayList<String>();

String regex = startMatch + "(.*)" + endMatch;
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(html);
    while (matcher.find()) {
        listOfLinks.add(matcher.group(1));
    }

Где regex имеет значение:

class="thumb-link" href="(.*)" titl

Я получаю этот результат:

http://www.sportscraft.com.au/longline-vest--9344961510736.html" title="Longline Vest "> <img class="alpha" src="http://demandware.edgesuite.net/sits_pod19/dw/image/v2/AAJZ_PRD/on/demandware.static/Sites-Sportscraft-Site/Sites-sc-master/default/v1427554286311/images/hi-res/1102031_black_a.jpg?sw=180&amp;sh=215&amp;sm=fit" alt="Longline Vest , BLACK, hi-res" title="Longline Vest , BLACK" height="214" /> <img class="beta" src="http://demandware.edgesuite.net/sits_pod19/dw/image/v2/AAJZ_PRD/on/demandware.static/Sites-Sportscraft-Site/Sites-sc-master/default/v1427554286311/images/hi-res/1102031_black_b.jpg?sw=180&amp;sh=215&amp;sm=fit" alt="Longline Vest , BLACK, hi-res

Когда все, что я хочу, это:

http://www.sportscraft.com.au/longline-vest--9344961510736.html

Это означает, что первая часть class="thumb-link" regex class="thumb-link" работает нормально. Но вторая часть " titl не останавливается в первый раз, когда она совпадает. Она продолжает идти, пока не найдет другое происшествие.

Когда я тестирую это на http://myregexp.com/ с тем же регулярным выражением, я получаю правильный результат. Я предполагаю, что есть какой-то параметр, который мне нужно настроить, чтобы сделать это "не жадным", но не уверен, что, поскольку я не могу воспроизвести ошибку в тесте регулярного выражения.

  • 2
    Нежадный есть ? , Так что href="(.*?)" . Вы, вероятно, не должны разбирать HTML с помощью регулярных выражений. Это подвержено ошибкам. Желательно использовать библиотеку HTML для разбора.
  • 0
    @cbednarski - спасибо. Дело в том, что часть контента, который мне нужен, находится не в HTML, а в различных JS-скриптах и т. Д. Regex в целом оказался очень хорошим. Просто нужно «сначала очистить исходный html», т.е. удалить все пробелы длиной более 2 пробелов и удалить разрывы строк.
Показать ещё 4 комментария
Теги:

1 ответ

1

Попробуйте использовать что-то вроде:

String regex = "^(.*?[^ ]) .*?";//remove ^, i have tried on your input string.
Output:
[http://www.sportscraft.com.au/longline-vest--9344961510736.html"]
  • 0
    Спасибо, почему-то я думал, что проблема была с регулярным выражением Java, а не регулярным выражением. Решение @ cbednarski работает хорошо. Но тоже попробую

Ещё вопросы

Сообщество Overcoder
Наверх
Меню