2012-03-06 4 views
0

Мне нужно регулярное выражение, которое сможет проверять строки, такие как;Регулярное выражение: проверка для разделяемой запятой строки

"", "0", "1,2", "2,3", "1,2,3" 
  1. когда, если «0» происходит, то другие числа не будет (например, «0,1» не допускается),
  2. диапазон номеров является переменной она может быть не менее 2 и не более п ,
  3. не допускается дублирование номеров, например, «1,2,2,3»,
  4. нет необходимости в последовательности, например «1,3,4».
  5. строки не вложены. мы никогда не проверяем, например, "" 0 "," 1,2 "".
  6. n максимум 10, но переменная, как я сказал.
+2

Регулярное выражение вряд ли будет лучшим способом решить эту проблему. –

+0

Никогда не делайте такого рода вещи с помощью 'regexp'. – kev

+0

Я думаю, что это было бы относительно просто с регулярным выражением, за исключением комбинации 3 и 4. По крайней мере, я не знаю простого способа их комбинирования. Кстати, я предполагаю, что у вас есть каждая из этих строк отдельно, и это не одна строка, которая включает двойные кавычки. Можете ли вы уточнить это в своем вопросе? – KobeJohn

ответ

1

Поскольку вам необходимо проверить (относительно) сложные правила, вам лучше отключить вход в массив: string.split(","); и перебрать его, проверив необходимые условия.

+0

Вначале я использовал этот подход, но нужно проверить многие вещи (nullity, 0 condition, duplication и т. Д.) Требует много операций с строкой. Я думал, что мне интересно, можно ли делать все эти проверки в одном или не более двух строках кода. – px5x2

+0

Вам нужно фактически несвязанное количество памяти (так как максимальное значение 'n', которое может быть высоким, и вам нужно иметь обратные ссылки на _all_ числа.) При компиляции регулярное выражение может быть преобразовано в [FSM] (http://en.wikipedia.org/wiki/Finite-state_machine), который может реализовать только фиксированный объем памяти, поэтому этот класс проблем не может быть разрешен регулярными выражениями/FSM в общем случае. –