Модераторы: bsa
  

Поиск:

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


Новичок



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

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



Добрый день! Подскажите, пожалуйста, в чем ошибка.
Нужно выделить отдельно минуты и отдельно часы в выражении а-ля crontab
Например
Код

15 12 * * *

15,45 12 * * *

15,45,30 12,18,22 * * *

15,45,30,35 12,18,22,23 * * *

Количество элементов в списке минут и списке часов не ограничено.
Первый блок — минуты 0..59 через запятую без пробелов, затем пробел — и аналогично список часов 0..23. Далее пробел и через пробелы три звездочки.
Мне нужно получить список минут и список часов, например:
Код

15,45,30,35 12,18,22,23 * * *

в результате должно быть: 
Код

«15», «,45», «,30»,  «,35», « », «12», «,18», «,22», «,23» 
(пробел выделяю для того, чтобы отделить минуты от часов, запятые убираю потом — но если можно сделать сразу без них, было было отлично).
Мое регулярное выражение:
Код

^([1-5][0-9]|[1-9])([,][1-5][0-9]|[,][1-9])*(\\s)([1-2][0-9]|[1-9])([,][1-2][0-9]|[,][1-9])*\\s[*]\\s[*]\\s[*]$

Совпадение находит,однако в результате
Код

    0: 15,45,30,35 12,18,22,23 * * *

    1:  15

    2:  ,35

    3:

    4: 12

    5:  ,23

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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Возьмите '*' в дополнительные скобки:

Код

^([1-5][0-9]|[1-9])(([,][1-5][0-9]|[,][1-9])*)(\\s)([1-2][0-9]|[1-9])(([,][1-2][0-9]|[,][1-9])*)\\s[*]\\s[*]\\s[*]$

Сейчас из за того, что '*' стоят после скобок, в качестве результата используется последнее совпадение

PM MAIL   Вверх
mdlv
Дата 29.1.2016, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @ 29.1.2016,  14:51)
Возьмите '*' в дополнительные скобки:

Код

^([1-5][0-9]|[1-9])(([,][1-5][0-9]|[,][1-9])*)(\\s)([1-2][0-9]|[1-9])(([,][1-2][0-9]|[,][1-9])*)\\s[*]\\s[*]\\s[*]$

Сейчас из за того, что '*' стоят после скобок, в качестве результата используется последнее совпадение

Вот что получается

15,45,50,17 12,18,22 * * *
Всего совпадений: 8
0:  15,45,50,17 12,18,22 * * *
1:  15
2:  ,45,50,17
3:  ,17
4:  
5:  12
6:  ,18,22
7:  ,22
PM   Вверх
xvr
Дата 29.1.2016, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Все правильно. Вас интересуют группы 1,2,5 и 6. По запятым вам придется резать самому. Группы в регулярном выражении статически определяются скобками (1 группа - 1 пара скобок), а так как количество чисел в списках через запятую статически неизвестно, то для их отдельного выделения группы в регулярных выражениях не пригодны.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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