2012-10-10 2 views
1

Я хочу создать регулярное выражение только для цифр (0-9), за которыми следует точка. Это может продолжаться до 4 раз. Фокус в том, что его не нужно продолжать.Регулярное выражение (Regex) quesiton

Например:

1234 is OK 
1234.1234 is OK 
1234.1234.1234 is OK 
1234.1234.1234.1234 is OK 

NOT OK:

asdf NOT OK 
1234.. NOT OK 
1234..1234 NOT OK 
1234,-/etc. NOT OK 
123asd NOT OK 
1234.1234asd NOT OK 

Я знаю, что это трудно, но любая помощь очень ценится.

+1

Отметьте это на используемом вами языке - синтаксис регулярных выражений отличается между языками – codebox

+1

Это не так сложно, и вы должны попробовать что-то самостоятельно. SO не является службой доставки кода. – stema

+0

Добро пожаловать в переполнение стека! Мы рекомендуем [исследовать ваши вопросы] (http://stackoverflow.com/questions/how-to-ask). Если вы [попробовали что-то уже] (http://whathaveyoutried.com/), добавьте его в вопрос - если нет, сначала исследуйте и сначала попробуйте свой вопрос, а затем вернитесь. –

ответ

4

Если я правильно понял, это должно работать:

^[0-9]+(\.[0-9]+){0,3}$ 
+1

+1 хотя я лично использовал '\ d' над' [0-9] 'давая'^\ d + (\. \ D +) {0,3} $ '! – stevehipwell

+1

Да, это более аккуратно, но я не был уверен, что '\ d' является общепризнанным или нет, и нет упоминания о том, какой язык OP использует – codebox

+0

Очень верно,' [0-9] 'является более универсальным. – stevehipwell

3

Это для C#?

Regex regex = new Regex(@"^\d+(\.\d+){0,3}$"); 
+0

no, "^ \ d + (\. \ D +) * $" гораздо ближе к моему делу, но в любом случае спасибо – DevelopmentEnthusiast

+0

, почему скобки? –

+1

@ user1734938: На самом деле это не так. Вы хотели до трех повторений, но версии звездочки допускают бесконечные повторения. –

2

как об этом один:

^\d+(\.\d+){0,3}$ 
+0

Это позволяет слишком много (неограниченных) вторичных групп! – stevehipwell

+0

@ M42: 1234.1234.1234.1234. считается действительным. – TCM

+0

Это почти то, что я хотел, я могу переделать отсюда; Спасибо большое! – DevelopmentEnthusiast

0

Я не уверен, что я согласен с принятым ответом. Я не могу принять принятый ответ.

Насколько я понимаю, принятый ответ соответствие: -

^ начало строки

[0-9]+ один или более цифр 0 до 9 это также может быть представлена ​​короткая рука \ D

( начало повторения

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

[0-9]+ один или более цифры 0 до 9 этого также может быть представлен в короткую руку \ D

) конца повторения

{0,3} повторяется 0 или 3 раза

$ конец строки

поэтому мы можем соответствовать, например,

1234.12.123456789.1234 или

1234,12 или

123.1.234 или

Я может быть что-то недоразумение, но это не соответствует спецификации дают пример так в.

Если это не будет

^\d{4}(\.\d{4}){0,3}$ 

т.е.

^ начало строки

\d{4} четыре цифры

( начало повторения

\. один период (убежали обеспечить не рассматривается как джокер)

\d{4} 4 цифры

) конец повторения

{0,3} неоднократных 0 или 3 раза

$ конец строки

Это будет соответствовать

1234 или

1234,1234 или

1234.1234.1234 или

1234.1234.1234.1234

, который я прочитал как соответствующие требования.

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