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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что не так в моём Regexp ? 
V
    Опции темы
DenWPF
Дата 19.11.2010, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



если regexp = "<option *value=[\"'](.+?)[\"']*>(.+?)</option\\s*>";
достает все option  их value и содержание

если regexp = "<select *name=[\"'](.+?)[\"']*>*<option *value=[\"'](.+?)[\"']*>(.+?)</option\\s*>*<select\\s*>"; - не чего не работает.

мне нужно достать  <select name="x"> а потом их option (тег value и значение)</select>
Код

        Pattern p = null;
        Matcher m = null; 
        ArrayList list = new ArrayList();
        try {
          p = Pattern.compile("regexp");
          m = p.matcher(content.replaceAll("\n", ""));
          while (m.find()) {
             try {
                String gr_0 = m.group(0);
                String gr_1 = m.group(1);
                String gr_2 = m.group(2);
                String gr_3 = m.group(3);
                if(gr_0.indexOf("name=\"city\"")>=0)
                    list.add(gr_0);
             } catch (Exception e) {
                e.printStackTrace();
             }
           }
         } catch (Exception e) {
            e.printStackTrace();
         }


что я сделал не так?
PM MAIL   Вверх
Skipy
Дата 19.11.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

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



Вы строку приведите, которую разбираете, и что из нее получить хотите.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
DenWPF
Дата 19.11.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Цитата

 <select name="city" id="city_left_id">
        <option value="0">Любой</option>
        <option label="Винница" value="1">Винница</option>
<option label="Днепропетровск" value="11">Днепропетровск</option>
<option label="Донецк" value="13">Донецк</option>
<option label="Житомир" value="2">Житомир</option>
<option label="Запорожье" value="14">Запорожье</option>
<option label="Ивано-Франковск" value="15">Ивано-Франковск</option>
<option label="Киев" value="10">Киев</option>
<option label="Кировоград" value="16">Кировоград</option>
<option label="Луганск" value="17">Луганск</option>
<option label="Луцк" value="18">Луцк</option>
<option label="Львов" value="5">Львов</option>
<option label="Николаев" value="19">Николаев</option>
<option label="Одесса" value="12">Одесса</option>
<option label="Полтава" value="20">Полтава</option>
<option label="Республика Крым" value="21">Республика Крым</option>
<option label="Ровно" value="9">Ровно</option>
<option label="Сумы" value="8">Сумы</option>
<option label="Тернополь" value="3">Тернополь</option>
<option label="Ужгород" value="22">Ужгород</option>
<option label="Харьков" value="7">Харьков</option>
<option label="Херсон" value="23">Херсон</option>
<option label="Хмельницкий" value="4">Хмельницкий</option>
<option label="Черкассы" value="24">Черкассы</option>
<option label="Чернигов" value="6">Чернигов</option>
<option label="Черновцы" value="25">Черновцы</option>

    </select>

PM MAIL   Вверх
Kircul
Дата 19.11.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот мой пример:
Код

public class T {

    public static void main(String[] args) {
        process(" <select name=\"city\" id=\"city_left_id\">\n" +
                "        <option value=\"0\">Любой</option>\n" +
                "        <option label=\"Винница\" value=\"1\">Винница</option>\n" +
                "<option label=\"Днепропетровск\" value=\"11\">Днепропетровск</option>\n" +
                "<option label=\"Донецк\" value=\"13\">Донецк</option>\n" +
                "<option label=\"Житомир\" value=\"2\">Житомир</option>\n" +
                "<option label=\"Запорожье\" value=\"14\">Запорожье</option>\n" +
                "<option label=\"Ивано-Франковск\" value=\"15\">Ивано-Франковск</option>\n" +
                "<option label=\"Киев\" value=\"10\">Киев</option>\n" +
                "<option label=\"Кировоград\" value=\"16\">Кировоград</option>\n" +
                "<option label=\"Луганск\" value=\"17\">Луганск</option>\n" +
                "<option label=\"Луцк\" value=\"18\">Луцк</option>\n" +
                "<option label=\"Львов\" value=\"5\">Львов</option>\n" +
                "<option label=\"Николаев\" value=\"19\">Николаев</option>\n" +
                "<option label=\"Одесса\" value=\"12\">Одесса</option>\n" +
                "<option label=\"Полтава\" value=\"20\">Полтава</option>\n" +
                "<option label=\"Республика Крым\" value=\"21\">Республика Крым</option>\n" +
                "<option label=\"Ровно\" value=\"9\">Ровно</option>\n" +
                "<option label=\"Сумы\" value=\"8\">Сумы</option>\n" +
                "<option label=\"Тернополь\" value=\"3\">Тернополь</option>\n" +
                "<option label=\"Ужгород\" value=\"22\">Ужгород</option>\n" +
                "<option label=\"Харьков\" value=\"7\">Харьков</option>\n" +
                "<option label=\"Херсон\" value=\"23\">Херсон</option>\n" +
                "<option label=\"Хмельницкий\" value=\"4\">Хмельницкий</option>\n" +
                "<option label=\"Черкассы\" value=\"24\">Черкассы</option>\n" +
                "<option label=\"Чернигов\" value=\"6\">Чернигов</option>\n" +
                "<option label=\"Черновцы\" value=\"25\">Черновцы</option>\n" +
                "\n" +
                "    </select>");
    }

    private static void process(String str) {
        Matcher m = Pattern.compile("<select +name=\"(.+?)\".*?>(.*?)</select>",
                            Pattern.DOTALL).matcher(str);
        while (m.find()) {
            String city = m.group(1);
            List<String> list = getCitieValues(m.group(2));
            System.out.println(city + " = " + list);
        }
    }

    private static List<String> getCitieValues(String str) {
        Matcher m = Pattern.compile("<option .*?value=\"(.+?)\".*?>(.*?)</option>",
                            Pattern.DOTALL).matcher(str);
        List<String> result = new ArrayList<String>();
        while (m.find()) {
            result.add(m.group(1) + " - " + m.group(2));
        }
        return result;
    }

}

PM   Вверх
DenWPF
Дата 19.11.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



спасибо
PM MAIL   Вверх
DenWPF
Дата 19.11.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Но на мой вопрос мне все же нужен ответ. как это сделать в одном запросе.

просто дальше парсинг товаров, а это :

"<li +class=\"b-header\">*>(.+?)</li>" - в группе 1 находится вот это.
Цитата

                    <span>
                                                <a class="bold" id="3155854_itemHeaderLink"
                                                           href="auto_lowe_3155854.html" >
                                                      Lowe FM 170 Sea Nymph V Sereies
                        </a>
                        2002 г.в                      </span>
     
                                                   <a href="./sms_auto/3155854" class="up-auto" target="_blank" title="Поднять вверх при поиске" onclick="newWindowSize('./sms_auto/3155854',850,500); return false;"></a>
                                         
                                        <a class="city" href="city/kiev/10" title="Поиск в городе Киевская">Киев</a>

            
а теперь это мне нужно вытащить как "auto_lowe_3155854.html" "Lowe FM 170 Sea Nymph V Sereies" "city/kiev/10".

и для каждого создавать новый метод я не хочу.
PM MAIL   Вверх
Kircul
Дата 19.11.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



DenWPF, а вы не задумывались что вам может надо использовать HTML parser для данной задачи? Нет я не говорю что с помощью регулярных выражений вашу задачу сложно/не возможно решить, просто использовать парсер мне кажется будет более красивым решением.

Это сообщение отредактировал(а) Kircul - 19.11.2010, 14:55
PM   Вверх
DenWPF
Дата 19.11.2010, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



да, я согласен, я раньше вообще пользовался просто string функциями.

а парсером я не знаю как пользоваться, боюсь что долго разбератся.


----

спасибо разобрался

Это сообщение отредактировал(а) DenWPF - 19.11.2010, 21:40
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.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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