Как сгенерировать код регулярного выражения для строки типа «12A13»: - PullRequest
1 голос
/ 06 июля 2019

У меня есть запрос, например, необходимо сгенерировать регулярное выражение для строки типа «12A15» или «12a15». Здесь она имеет 3 компонента [максимальная длина 1-9 будет 2] [только d или D] [1-9Максимальная длина будет 2].

Я написал Regex для проверки строки, но все еще не в состоянии проверить, дают числа:

(^[1-9]{1,2}[{d,D}][{4,6,8,10,12,20}]{1,2})+(\s?(\+|\-)\s?)([1-9]{1,2}([{d,D}][{4,6,8,10,12,20}]{1,2}))$

Здесь, в регулярном выражении, я проверяюстрока 12D22 +3d20.Он говорит, что он совпадает, но не должен, потому что 22 нет в списке.В допустимой строке 5D20+5d12, 12 и 20 может быть любым числом из списка 4, 6, 8, 12, 20.

1 Ответ

1 голос
/ 11 июля 2019

Вы можете использовать

^[0-9]{1,2}[dD]([468]|1[02]|20)\s?[+-]\s?[0-9]{1,2}[dD]([468]|1[02]|20)$

См. Демоверсию регулярных выражений и график регулярных выражений :

enter image description here

Детали

  • ^ - начало строки (опускается, если используется в .matches())
  • [0-9]{1,2} - 1 или 2 цифры
  • [dD] - d или D
  • ([468]|1[02]|20) - 4, 6, 8, 10, 12 или 20
  • \s? - дополнительный пробел
  • [+-] - + или -
  • \s? - дополнительный пробел
  • [0-9]{1,2}[dD]([468]|1[02]|20) - см. Выше
  • $ - конец строки (опускается, если используется в .matches()).

В Java:

String block = "[0-9]{1,2}[dD](?:[468]|1[02]|20)";
String regex = block + "\\s?[+-]\\s?" + block;
bool matched = your_string.matches(regex);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...