![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Feldsher |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 14.3.2006 Репутация: нет Всего: нет |
Всех с наступающим!
Ребята, помогите ответом хотя бы в новом году) Не могу написать регулярку для таких строк: есть 3 словаря, символы каждого из которого должны входить в строку хотя бы 1 раз ( [abc], [def], [ghj]) и 2 словаря, символов из которых в строке быть не должно ([^xyz], [^uvw]). Порядок использования словарей в проверяемых строках можеть быть любой. Длина - от 10 до 20 символов. Как написать регулярку, отбирающую соответствующие строки? Заранее спасибо! Пока остановиля на следующем, но результата пока нет
Это сообщение отредактировал(а) Feldsher - 30.12.2012, 18:13 |
|||
|
||||
Feldsher |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 14.3.2006 Репутация: нет Всего: нет |
Т.е. строка gggggggggggaaaaa проверку проходить не должна (нет ни одного символа из 2-го словаря), aaaaadddddjjjjjj должна проходить проверку (есть буквы из всех 3-х разрешённых словарей, нет запрещённых букв), xaaaaadddddjjjjjj - не должна (есть запрещённый символ).
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А в перемешку может быть, слово 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. |
|||
|
||||
Feldsher |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 14.3.2006 Репутация: нет Всего: нет |
С праздником!
Да, валидное. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
У меня регулярка получается весьма "кучерявой": первая группа:
и так надо перебрать все варианты перстановок для групп [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. |
|||
|
||||
Feldsher |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 14.3.2006 Репутация: нет Всего: нет |
Спасибо.
А как быть если словари будут по 20 символов? Кодом вроде как не технологично) Это сообщение отредактировал(а) Feldsher - 3.1.2013, 19:35 |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 1 Всего: 55 |
Feldsher, а пойти от обратного нельзя?
Вот эта нехитрая строчка находит все, что вам не подходит. Соответственно все, что не подпадает под это выражение, - то, что вам надо.
http://regexr.com?33a0k Добавлено через 3 минуты и 16 секунд Просто смените условие проверки с true на false и все =) -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
не заморачивайся на сие. регулярки — для сокращения используются с рассчетом на более понятную запись. все равно они транслируются в конечный автомат. так что если двумя регулярками короче — лучше двумя. если циклом понятнее — лучше циклом. регулярки со своими backtrack'ами порою оказываются бомбой замедленного действия, приводя чуть ли не к факториальной сложности при выполнении. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Очень даже технологично, просто надо взять коллекцию которая умеет работать с примитивами 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. |
|||
|
||||
Feldsher |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 14.3.2006 Репутация: нет Всего: нет |
Arantir - спасибо. А куда писать квантификаторы (проверку длины строки)? Если после группы, то не находится "adh"
skyboy - у нас гл. технолог, если заговорить о замерах производител]ьности, рвёт талоны по ТБ) LSD - а работать с произвольной коллекцией или с сетом (уникальной)? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
как я представляю, у тебя как раз подобный случай. пускай вместо (….*…)* у тебя и (.*?….*){10,20}
надеюсь, строки фиксированной небольшой длины? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
||||
|
||||
Feldsher |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 14.3.2006 Репутация: нет Всего: нет |
skyboy - да, от 10 до 20 символов.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |