2012-01-03 4 views
1

Я создать регулярное выражение с этими правилами:Regex процента через запятую

  1. Номер находится между 5-100
  2. Количество разделены запятой (55,70,90)
  3. Номера являются уникальными в строке

Например:

  • 10,20,50 OK
  • 10 20,50 НЕТ (белое пространство)
  • 10,20,50, НЕТ (завершающая запятая)
  • 10,10,20
  • НЕТ (уникальный)

Можете ли вы мне помочь?

+3

Можете ли вы показать нам, что вы пробовали, и почему это не удалось? – leonbloy

+0

Ну, цифры между 5 и 100, а числа разделены запятой, но дублирующее число вещей не выходит за рамки регулярных выражений, которые я думаю. – hochl

+3

Это домашнее задание? Должно ли это быть реализовано полностью как регулярное выражение или вы можете использовать некоторый код Java? –

ответ

1

Хотя может быть возможно выполнить все проверки с помощью регулярного выражения, я думаю, что это не правильный инструмент для работы.

я бы:

  • Используйте регулярное выражение для проверки строка только цифры и запятые: ^(?:[0-9]+,)*[0-9]+$
  • Использование split(',', $input) превратить в массив
  • Цикл по массиву и обеспечить число между 5 - 100 (арифметическое сравнение) и без дубликатов (сравнение массива).
+0

Я пробовал с вводом строки = "40,50,80"; \t \t Строковый шаблон = "/^[0-9,] + $ /"; \t \t Паттерн p = Pattern.compile (узор); \t \t Матчи m = p.matcher (вход); \t \t System.out.println (m.matches()); но всегда возвращайтесь! – CeccoCQ

+0

+1 Это решение прост и понятен. Я бы улучшил регулярное выражение, чтобы сделать его числами и запятыми, например '^ (?: [0-9] +,) * [0-9] + $'. – hochl

+0

@hochl, я обновил регулярное выражение. –

2

Это не работа для регулярных выражений, потому что у вас

  1. переменное количество элементов в списке
  2. ограничения числа (> 5, < 100), которые обычно трудно представить в регулярном выражении.

Вы можете сделать это просто с String#split():

String arr[] = s.split(","); 
for (int i=0; i<s.length; i++) { 
    // apply your rules here 
} 
+0

Регулярное выражение может использоваться для проверки. Вы предполагаете, что ввод находится в допустимом формате, который, по мнению OP, не является. –

0

Решение на вопрос 1)

(?:[5-9]|[1-9][0-9]|100)(?![0-9]) 

Количество, которое либо между 5 и 9, от 10 до 99, или 100 , за которым не следует цифра.

Смежные вопросы