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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение выдает лишнее в одном случае 
:(
    Опции темы
Mephisto
Дата 14.3.2014, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Привет всем.
Столкнулся с задачей необходимости разобрать текст регуяркой, так как сталкиваюсь с ними редко задачка сломала мозг.
Есть такого рода строки:
Цитата
<t:outputLabel value="#{msgs['recovery_password.form.login']}" for="LOGIN" forceId="true" />

зеленым выделил то что нужно извлечь из строки.
Написал регулярку
Код

\p{Punct}\p{Punct}msgs\p{Punct}'(.*)'

Работает прекрасно до тех пор пока в одной строке не встречается что-то вроде:
Цитата
<t:commandLink value="#{msgs['recovery_password.form.btn.restore']}" action="#{pwdRecovery.actionRecoveryPassword}" title="#{msgs['recovery_password.form.restore']}" id="btnStore" forceId="true"/>

Последнее правило нужно как-то специфицировать иначе. Но не пойму как. )) Потому как последнее исполняется дважды.
По идее нужно выбрать 
Цитата
<t:commandLink value="#{msgs['recovery_password.form.btn.restore']}" action="#{pwdRecovery.actionRecoveryPassword}" title="#{msgs['recovery_password.form.restore']}" id="btnStore" forceId="true"/>

Если кто понимает в какую сторону посмотреть, или решение, буду весьма признателен.
Спасибо.
PM   Вверх
danilych
Дата 14.3.2014, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



советую погуглить про жадные и ленивые кванторы
PM MAIL   Вверх
baldina
Дата 14.3.2014, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

"#\{msg\['(.*)?'\]\}"

PM MAIL   Вверх
Mephisto
Дата 14.3.2014, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(danilych @  14.3.2014,  10:20 Найти цитируемый пост)
советую погуглить про жадные и ленивые кванторы 

Да, как раз с ними мозг и взрывался. Не понимал как использовать.

Цитата(baldina @  14.3.2014,  10:21 Найти цитируемый пост)
"#\{msg\['(.*)?'\]\}"

Вообще в выборку ничего не попало :(

Спасибо.
В результате получилось так:
Цитата
#\p{Punct}msgs\p{Punct}'(.*?)'

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


Эксперт
****


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

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



ну да, знак вопроса в скобках)

Добавлено через 2 минуты и 41 секунду
Код

#\{msgs\['(.*?)'\]\}

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


Опытный
**


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

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



еще можно так:
Код

package regular;

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

public class Main {

    public static void main(String[] args) {
        String line = "<t:commandLink value=\"#{msgs['recovery_password.form.btn.restore']}\" action=\"#{pwdRecovery.actionRecoveryPassword}\" title=\"#{msgs['recovery_password.form.restore']}\" id=\"btnStore\" forceId=\"true\"/>";
        Pattern p = Pattern.compile("#\\{msgs\\['(\\S*)?'");
        Matcher m = p.matcher(line);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

На выходе получается
Код

#{msgs['recovery_password.form.btn.restore'
#{msgs['recovery_password.form.restore'



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

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

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


 




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


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

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