2010-09-20 3 views
0

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

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

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

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

+0

Вы используете регулярное выражение, чтобы соответствовать регулярному выражению –

+0

Да :) Я знаю, немного странно, но я пишу немного парсер для упрощенного регулярных выражений нотации? для проекта, над которым я работаю. – Nikita

ответ

1

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

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

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

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

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

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

+0

у вас отсутствует закрывающая скобка -^{(\ d + (, (\ d)?)?) |, \ d +} . Спасибо, это уровень краткости, который я искал :) – Nikita

+0

Я думаю, что это исправлено Nick Nick. Извините за столько изменений. –

0

Для начала все начинается с {\s* и заканчивается \s*}. Таким образом, вы можете по крайней мере, «реорганизовать те из:

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

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