улучшение регулярного выражения, соответствующего {m, n} | {m,} | {, n} | {n} в начале строки - PullRequest
0 голосов
/ 21 сентября 2010

Требуется регулярное выражение, которое будет соответствовать любому из {m, n} | {m,} | {, n} | {n} (где m и n - целые числа) с произвольным числом пробелов между символами в началелинии.Я придумал это:

^ ({\ s * \ d + \ s *, \ s * \ d + \ s *} | {\ s *, \ s * \ d + \ s *} | {\ s * \ d + \ s *, \ s *} | {\ s * \ d + \ s *})

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

ОБНОВЛЕНИЕ: Марк предложил отличное решение: ^ \ {(\ s * \ d + \ s * (, (\ s * \ d + \ s *)?)? |, \ S *\ d + \ S *) \}

Ответы [ 2 ]

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

Вы должны быть в состоянии сделать это, по крайней мере (игнорируя пробелы для краткости):

"^\\{(\\d+(,(\\d+)?)?|,\\d+)\\}"

Это охватывает все, кроме случая {, n} в первом варианте.

Добавление пробелов обратно в:

"^\\{\\s*(\\d+(\\s*,(\\s*\\d+)?)?|,\\s*\\d+)\\s*\\}"

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

0 голосов
/ 21 сентября 2010

Например, все они начинаются с {\s* и заканчиваются \s*}.Таким образом, вы можете по крайней мере "рефакторинг" из них:

^{\s*(\d+\s*,\s*\d+|,\s*\d+|\d+\s*,|\d+)\s*}

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