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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Квантификаторы в Look-ahead условиях, Не работает для символьного класса \s 
V
    Опции темы
serious
Дата 6.12.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Условие такого вида работает
Код
(?<!\\d{2}\\s\\d{2}\\s)

, а вот такого
Код
(?<!\\d{2}[b]\\s+[\b]\\d{2}\\s)

не компилируется (Caused by: java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 18).

Объясните, пожалуйста, как учитывать множественные пробелы в условиях? Почему для символьного класса \d можно указать квантификаторы в условии, а для \s нет?

Это сообщение отредактировал(а) serious - 6.12.2007, 11:50


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
serious
Дата 6.12.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
SergeCpp
Дата 6.12.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



Укажите "obvious maximum length" для квантификатора при Look-behind

Для \d она указана: 2

Для \s она не указана: + (что == {1,бесконечность})

Попробуйте вместо \s+ написать \s{1,10} (измените 10 в зависимости от специфики задачи)

P.S. Хотя вот тут используется +

Код
// a negative lookbehind
p = Pattern.compile("(?<!a+)foo(.)");
m = p.matcher(txt);
if(m.find()) {
System.out.println(m.group(1)); // prints "c"
}


PM MAIL WWW ICQ   Вверх
serious
Дата 6.12.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SergeCpp @  6.12.2007,  07:40 Найти цитируемый пост)

Попробуйте вместо \s+ написать \s{1,10} (измените 10 в зависимости от специфики задачи)

Не очень мне нравится такое решение... Неужели не существует способа указать в данном случае произвольное количество пробелов?

Это сообщение отредактировал(а) serious - 6.12.2007, 16:36


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
SergeCpp
Дата 6.12.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



Может быть, возможно как-то по-другому составить выражение, без такой штуки в Look-behind?

Ведь Look-behind не всегда же было (да и сейчас не везде есть), как-то обходились

Для чего выражение нужно-то?

P.S. Джеффри Фридл. "Регулярные выражения" читали?


Это сообщение отредактировал(а) SergeCpp - 6.12.2007, 16:38
PM MAIL WWW ICQ   Вверх
serious
Дата 6.12.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Чтобы проверить, что перед искомым текстом не идет последовательность \d{2}\s\d{2}, т.е. серия паспорта.
Хлтя, я понял что \s+ мне в данном случае не требуется  smile , слишком сложное условие получается.

SergeCpp, а я тут уже жуткие вещи начал изобретать  smile Нда, проще надо быть, проще...


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
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.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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