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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярн. выражения 
:(
    Опции темы
Feldsher
Дата 30.12.2012, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всех с наступающим!

Ребята, помогите ответом хотя бы в новом году)
Не могу написать регулярку для таких строк: есть 3 словаря, символы каждого из которого должны входить в строку хотя бы 1 раз ( [abc], [def], [ghj]) и 2 словаря, символов из  которых  в строке быть не должно ([^xyz], [^uvw]). Порядок использования словарей в проверяемых строках можеть быть любой. Длина - от 10 до 20 символов.
Как написать регулярку, отбирающую соответствующие строки?

Заранее спасибо!

Пока остановиля на следующем, но результата пока нет
Код
(  (?=.*[abc])  |   (?=.*[def])   |   (?=.*[ghj])   |   (?!.*[xyz])   |   (?!.*[uvw])  ) {10,20}



Это сообщение отредактировал(а) Feldsher - 30.12.2012, 18:13
PM MAIL   Вверх
Feldsher
Дата 30.12.2012, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Т.е.  строка      gggggggggggaaaaa проверку  проходить не должна (нет ни одного символа из 2-го словаря),    aaaaadddddjjjjjj должна проходить проверку (есть буквы из всех 3-х разрешённых словарей, нет запрещённых букв), xaaaaadddddjjjjjj - не должна (есть запрещённый символ).
PM MAIL   Вверх
LSD
Дата 3.1.2013, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Feldsher @  30.12.2012,  04:11 Найти цитируемый пост)
Не могу написать регулярку для таких строк: есть 3 словаря, символы каждого из которого должны входить в строку хотя бы 1 раз ( [abc], [def], [ghj]) и 2 словаря, символов из  которых  в строке быть не должно ([^xyz], [^uvw]). Порядок использования словарей в проверяемых строках можеть быть любой.

А в перемешку может быть, слово adgbehcfj валидное?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Feldsher
Дата 3.1.2013, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



С праздником!
Да, валидное.
PM MAIL   Вверх
LSD
Дата 3.1.2013, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



У меня регулярка получается весьма "кучерявой": первая группа:
Код

[^xyzuvw]*[abc]+[^xyzuvw]*[def]+[^xyzuvw]*[ghj]+[^xyzuvw]*

и так надо перебрать все варианты перстановок для групп [abc], [def], [ghj].

Мне кажется лучше будет или кодом это сделать или двумя регулярными выражениями.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Feldsher
Дата 3.1.2013, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо.
А как быть если словари будут по 20 символов? Кодом вроде как не технологично)

Это сообщение отредактировал(а) Feldsher - 3.1.2013, 19:35
PM MAIL   Вверх
Arantir
Дата 3.1.2013, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



Feldsher, а пойти от обратного нельзя?
Вот эта нехитрая строчка находит все, что вам не подходит. Соответственно все, что не подпадает под это выражение, - то, что вам надо.
Код

^([^abc]+|[^def]+|[^ghj]+|.*?[xyzuvw]+.*)$

http://regexr.com?33a0k

Добавлено через 3 минуты и 16 секунд
Просто смените условие проверки с true на false и все =)


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
skyboy
Дата 3.1.2013, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(Feldsher @  3.1.2013,  18:34 Найти цитируемый пост)
Кодом вроде как не технологично)

не заморачивайся на сие. регулярки — для сокращения используются с рассчетом на более понятную запись. все равно они транслируются в конечный автомат. так что если двумя регулярками короче — лучше двумя. если циклом понятнее — лучше циклом. 
регулярки со своими backtrack'ами порою оказываются бомбой замедленного действия, приводя чуть ли не к факториальной сложности при выполнении.
PM MAIL   Вверх
LSD
Дата 4.1.2013, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Feldsher @  3.1.2013,  20:34 Найти цитируемый пост)
А как быть если словари будут по 20 символов? Кодом вроде как не технологично)

Очень даже технологично, просто надо взять коллекцию которая умеет работать с примитивами CharSet. И по скорости будет намного быстрее, строку можно будет проверить за один проход и без возвратов.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Feldsher
Дата 4.1.2013, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Arantir - спасибо. А куда писать квантификаторы  (проверку длины строки)? Если после группы, то не находится "adh"  
Код
^  (  [^abc]+  |  [^def]+  |  [^ghj]+  |  .*?  [xyzuvw]+.*){10,20}  $

skyboy - у нас гл. технолог, если заговорить о замерах производител]ьности, рвёт талоны по ТБ)
LSD - а работать с произвольной коллекцией или с сетом (уникальной)?



PM MAIL   Вверх
skyboy
Дата 4.1.2013, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



как я представляю, у тебя как раз подобный случай. пускай вместо (….*…)* у тебя и (.*?….*){10,20}
надеюсь, строки фиксированной небольшой длины?
PM MAIL   Вверх
skyboy
Дата 4.1.2013, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(skyboy @  3.1.2013,  20:02 Найти цитируемый пост)
чуть ли не к факториальной сложности

налажал. там экспонентная сложность.
PM MAIL   Вверх
Feldsher
Дата 7.1.2013, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



skyboy - да, от 10 до 20 символов.
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.1344 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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