2015-12-22 2 views
0

Мне нужно регулярное выражение для проверки номеров версий.Регулярное выражение для проверки номеров версий

У меня есть 4 типа номера версии:

  • 2015.1
  • 2015.1.01
  • 2015.1.01.1
  • 2015.1.01.1.RE

  • Группа 1 #: Мне нужно ровно 4 числа

  • Группа 2 #: ровно 1 номер
  • Группа 3 #: (1-2) номера
  • Группа 4 #: (1-4) номера
  • Группа 5 #: просто RE

Я уже пробовал ^(\d+\.)?(\d+\.)?(\d+\.)?(\d+\.)?(\w+)$, но не работает.

string Expressao = @"^(\d+\.)?(\d+\.)?(\d+\.)?(\d+\.)?(\w+)$"; 
Regex Reg = new Regex(Expressao); 
foreach(string rotulo in rotulos) 
{ 
    Match result = Reg.Match(rotulo); 
    if (result.Success) 
    { 
     Console.ForegroundColor = ConsoleColor.Green; 
     Console.WriteLine(string.Format("Sucesso! {0}", rotulo), ConsoleColor.Green); 
    } 
    else 
    { 
     Console.ForegroundColor = ConsoleColor.Red; 
     Console.WriteLine(string.Format("Falha! {0}", rotulo), ConsoleColor.Green); 
    } 
} 
Console.ReadKey(); 

Как это сделать?

ответ

1

Ваше регулярное выражение должно быть,

string Expressao = @"^\d{4}\.\d(?:\.\d{1,2}(?:\.\d{1,4}(?:\.RE)?)?)?$"; 

DEMO

+0

В чем проблема с регулярным выражением Ор в? Должно быть, это сработало. – manouti

+0

Работает отлично! Спасибо! –

+0

@manouti no, op's regx также будет соответствовать 'foo' –

1

Давайте начнем с основ.

Во-первых, перечислите пять групп

  1. [0-9]{4}
  2. [0-9]
  3. [0-9]{1,2}
  4. [0-9]{1,4}
  5. RE

Далее список четыре вариации

  1. [0-9]{4}\.[0-9]
  2. [0-9]{4}\.[0-9]\.[0-9]{1,2}
  3. [0-9]{4}\.[0-9]\.[0-9]{1,2}\.[0-9]{1,4}
  4. [0-9]{4}\.[0-9]\.[0-9]{1,2}\.[0-9]{1,4}\.RE

Наконец, положить их все вместе.

^([0-9]{4}\.[0-9]|[0-9]{4}\.[0-9]\.[0-9]{1,2}|[0-9]{4}\.[0-9]\.[0-9]{1,2}\.[0-9]{1,4}|[0-9]{4}\.[0-9]\.[0-9]{1,2}\.[0-9]{1,4}\.RE)$

Это дает ответ рабочий, но не очень хороший.

Но, зная немного волшебства RE, вы можете создать более приятную версию. Здесь я связал опции, чтобы объединить полную версию.

^[0-9]{4}\.[0-9](\.[0-9]{1,2}(\.[0-9]{1,4}(\.RE)?)?)?$

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