Шаблон регулярных выражений Java для исключения некоторых групповых строк - PullRequest
0 голосов
/ 09 мая 2018

У меня есть регулярное выражение, такое как ^([1-9]\\d*)([dDmMwWyY])$

Соответствует 1d, 10d, 2W, 100Y и т. Д.

Теперь я хочу сопоставить 0d, 0D и выше, но не 0w, 0y, 0m.

Так как мне написать свое регулярное выражение?

Если я напишу ^([0-9]\\d*)([dDmMwWyY])$ Это будет соответствовать 0w, что не хочу

И мне нужны цифры в macher.group (1) и строка в группе (2)

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

почему бы не просто

 ^(0d)$|^([1-9]\\d*)([dDmMwWyY])$

это однозначно.Вы хотите либо 0d, либо остаток рабочего времени.

0 голосов
/ 09 мая 2018

Если я хорошо понимаю, что-то в этом роде:

^([0-9]+[dD]|[1-9]\d*[mMwWyY])$

Это будет соответствовать любому числу с суффиксом d или D, и только числу, начинающемуся с «1» для оставшихся. Вы также можете написать это и использовать либо (?i), либо Pattern.IGNORE_CASE в качестве опции:

^([0-9]+d|[1-9]\d*[mwy])$

Если вам нужны совпадения (0) и совпадения (1), как описано в вашем комментарии:

^([0-9]+(?=[dD])|[1-9]\d*)([dmwyDMWY])$

Положительное прогнозное утверждение будет работать только с d / D, как предполагалось, поэтому оно будет 0d, но не 0y.

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