Регулярное выражение для соответствия спецификации размера - PullRequest
0 голосов
/ 27 сентября 2010

Мне нужна помощь в написании регулярного выражения, которое соответствует этому:

  • открывающая квадратная скобка ИЛИ номер в качестве первого символа
  • закрывающая квадратная скобка (если была открывающая квадратная скобка) ИЛИ номер (если открывающая была цифра) как последний символ
  • хотя бы одна запятая, разделяющая два числа без пробела, и если запятых больше, они должны быть разделенными числами без пробелов

Пример совпадения:

  • 1,1
  • [1,1]
  • [1,1,2,3]

Не соответствует:

  • [1,1
  • 1, 1
  • [1, 2,2]
  • [1,2,]

1 Ответ

1 голос
/ 27 сентября 2010

Если предположить, что "числа" - это одно или несколько экземпляров класса цифр \d, одно регулярное выражение будет:

^\d+(,\d+)+$|^\[\d+(,\d+)+\]$

Другие варианты «чисел» могут быть [1-9][0-9]*, которые не допускают начальные нули и будут ближе к представлению C / C ++ / C # / Java целочисленного литерала десятичного . Например, ведущие нули в C / C ++ / C # / Java обозначают восьмеричные целочисленные литералы. В Java я считаю, что 0 официально является десятичным литералом, поэтому более точное выражение будет 0|[1-9][0-9]*, тогда как в C ++ 0 технически является восьмеричным литералом (я думаю!).

Если предположить целочисленные литералы в стиле Java, то наше выражение станет:

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

Что бы вы ни делали, вам нужно решить, что представляет собой «число» в вашей ситуации, которое может совпадать или не совпадать с языком программирования, на котором вы реализуете свою программу.

Полезные ссылки:

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