Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Reluctant quantifiers, С правой стороны.... 
V
    Опции темы
skhilkov
Дата 11.12.2009, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 371
Регистрация: 11.4.2006
Где: TOMSK

Репутация: 2
Всего: 7



Ничего не понимаю... то ли лыжи не едут... 
В общем есть регексп, в нем есть reluctant quantifier .*? Я правильно понимаю что он должен включать в себя подстроку минимальной длины, при условии что правая и левая часть регекспа совпадают... В общем пример в студию!

Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package testsandexamples;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author skhil
 */
public class Main
{

    
    private static String text = "</span>&nbsp;<a href=\"/real-estate/apartments-sale/page30/\">30</a>&nbsp;&nbsp;<a href=\"/real-estate/apartments-sale/page2/\" class=\"nxt-page more\"><span>следующая</span>";
    

    public static void main(String[] args)
    {

        Pattern pat = Pattern.compile("href=\"(.*?)\\Qclass=\"nxt-page more\">\\E", Pattern.DOTALL|Pattern.UNICODE_CASE);// class=\"nxt-page more\"><span>следующая</span>\\E");//"\\Q<object_id>\\E(.*)\\Q</object_id>\\E";

        Matcher m = pat.matcher(text);
        while (m.find())
        {
            System.out.println("Found!"+m.group(1));
        }

    }
}



Вот хоть убей - выводит /real-estate/apartments-sale/page30/">30</a>&nbsp;&nbsp;<a href="/real-estate/apartments-sale/page2/
 а мне надо /real-estate/apartments-sale/page2/ !!

Я вот что подумал... может берется подстрока наименьшей длины, но только от левой части регекспа?? А правая сторона побоку?

Это сообщение отредактировал(а) skhilkov - 11.12.2009, 07:18


--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
skhilkov
Дата 11.12.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 371
Регистрация: 11.4.2006
Где: TOMSK

Репутация: 2
Всего: 7



Вот сижу и туплю... усли строку оставить 

Код

String text = "<a href=\"/real-estate/apartments-sale/page2/\" class=\"nxt-page more\"><span>следующая</span>";


То выводится то что нужно.... блин, ну как сделать чтоб искалась наименьшая строка? Ведь reluctant для того и сделаны....
Самое интересное, что если в примере заменить .*? на .* НИФИГА не меняется.... это чтож за беспредел такой (((


--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
Дрон
Дата 11.12.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Цитата(skhilkov @  11.12.2009,  07:14 Найти цитируемый пост)
Я вот что подумал... может берется подстрока наименьшей длины, но только от левой части регекспа?? А правая сторона побоку?

Правильно.
Регулярное выражение работает слева направо, находит первый href=" затем берёт все символы подряд, пока не наткнётся на class=\"nxt-page more\">


--------------------
Да. Именно так.
PM   Вверх
skhilkov
Дата 11.12.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 371
Регистрация: 11.4.2006
Где: TOMSK

Репутация: 2
Всего: 7



Дрон,  спасибо тебе! А как же быть в таком случае? 
Приходит на ум такой изврат:  воспользоваться lastIndexOf() класса String. 
Знает кто-нибудь менее извращенный вариант?


--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
Дрон
Дата 11.12.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



skhilkov, а что если в начало регэкспа добавить (.*) ?
То есть вот так:
Код
"(.*)href=\"(.*?)\\Qclass=\"nxt-page more\">\\E"


Только тогда смотреть результат надо будет не в первой группе, а во второй.

Вообще в сети немало страниц, где можно хоть онлайн потестировать регулярные выражения.

PS: Я чего-то не помню, а что такое \Q и \E ?


--------------------
Да. Именно так.
PM   Вверх
skhilkov
Дата 13.12.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 371
Регистрация: 11.4.2006
Где: TOMSK

Репутация: 2
Всего: 7



Дрон, +1 спасибо! Я уже извратился было с lastIndexOf, но сейчас переделаю, это лучше!


--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.