Шаблон регулярного выражения: открытая группа - PullRequest
1 голос
/ 05 июня 2019

Мне нужно сопоставить следующие шаблоны дат:

dd-mmm-yyyy (TBC)
dd-mmm-yyyy (TBD)
dd-mmm-yyyy

но я получаю следующее исключение и не понимаю, в чем ошибка. Я почти уверен в части даты, но я подозреваю, что источником ошибки является часть TBC / TBD, которая должна быть необязательной.

 java.util.regex.PatternSyntaxException: Unclosed group near index 614
^(29-02-(2000|2400|2800|(19|2[0-9](0[48]|[2468][048]|[13579][26]))))[ \(TB(C|D)\)]$|^((0[1-9]|1[0-9]|2[0-8])-((FEB)|(feb)|(Feb)|(FEV)|(fev)|(Fev))-((19|2[0-9])[0-9]{2}))[ \(TB(C|D)\)]$|^((0[1-9]|[12][0-9]|3[01])-(((JAN)|(jan)|(Jan))((MAR)|(mar)|(Mar))((MAY)|(may)|(May)|(MAI)|(mai)|(Mai))((JUL)|(jul)|(Jul)|(JUI)|(jui)|(Jui))((AUG)|(aug)|(Aug)|(AUO)|(auo)|(Auo))((OCT)|(oct)|(Oct))((DEC)|(dec)|(Dec)))-((19|2[0-9])[0-9]{2}))[ \(TB(C|D)\)]$|^((0[1-9]|[12][0-9]|30)-(((APR)|(apr)|(Apr)|(AVR)|(avr)|(Avr))((JUN)|(jun)|(Jun)|(JUI)|(jui)|(Jui))((SEP)|(sep)|(Sep)((NOV)|(nov)|(Nov))-((19|2[0-9])[0-9]{2}))[ \(TB(C|D)\)]$
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ^

У вас есть подсказка? Заранее спасибо

1 Ответ

1 голос
/ 06 июня 2019

Ваша модель не оптимальна и даже неверна:

  • В названиях месяцев отсутствуют операторы чередования
  • Слишком много повторений, которые отличаются только регистром: используйте флаг без учета регистра
  • [ \(TB(C|D)\)], скорее всего, является опечаткой, поскольку это класс символов, который соответствует одному определенному в нем символу, вам нужна (?: \(TB[CD]\))?, необязательная группа без захвата.

Используйте

(?i)^29-02-(?:2[048]00|(?:19|2[0-9](?:0[48]|[2468][048]|[13579][26])))(?: \(TB(C|D)\))?$|^(?:0[1-9]|1[0-9]|2[0-8])-fe[vb]-(?:19|2[0-9])[0-9]{2}(?: \(TB(C|D)\))?$|^(0[1-9]|[12][0-9]|3[01])-(jan|ma[ryi]|ju[li]|au[go]|oct|dec)-(?:19|2[0-9])[0-9]{2}(?: \(TB(C|D)\))?$|^(?:0[1-9]|[12][0-9]|30)-(?:a[pv]r|ju[ni]|sep|nov)-(?:19|2[0-9])[0-9]{2}(?: \(TB(C|D)\))?$

См. Демоверсию regex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...