2015-11-12 6 views
0

Я новый пользователь, так что извиняйте, если этот вопрос следует ответить, что это оригинальный пост: regex match numbers greater or equal than 20, by increments of 5, range 20 to 999числа регулярных выражений (Java) матч равен или больше 20, увеличивается на 5, не ведущие нули не допускаются

Neverteless, вот тока вопрос:

  • Match все числа равны или больше, то 20 (без верхнего предела)
  • дискретностью 5
  • Нет десятичной точки
  • Нули не должны быть разрешен

С stackoverflow user YMI ответом на другую должность:

(\d{2}|[2-9])[05] 

и user nhahtdh

^([2-9]|[1-9]\d)[05]$ 

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

ответ

0

Мой ответ очень похож на nhahtdh's, но обратите внимание на \d+, а не на \d, который не устанавливает верхний предел количества символов.

Вы хотите, регулярное выражение, как это:

\b((?:[23456789]|[123456789]\d+)[05])\b 

[Live Example]

Чтобы дать быстрое объяснение того, что здесь происходит:

  • \b совпадает с границей, подобно пробел или символ, поэтому \b s найдет полные слова из текста
  • Далее мы приводим два варианта префикса слова, это может быть один номер 2 или больше: [23456789]
  • Или это может быть 2 или больше числа, которые не во главе с 0: [123456789]\d+
  • Для нашего суффикса мы требуем она должна быть кратна 5: [05]

Regular expression visualization


Кстати вы можете сопоставить номера, которые отвечают вашим другим критериям, но и обладают ведущие 0s, просто потребляя 0s и затем сопоставьте номер, обратите внимание на добавление 0*, которое будет соответствовать любому числу ведущих 0s:

\b0*((?:[23456789]|\d{2,})[05])\b