用于验证版本号的正则表达式

时间:2015-12-22 17:40:20

标签: c# regex

我需要一个正则表达式来验证版本号。

我有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();

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你的正则表达式必须是,

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

DEMO

答案 1 :(得分:1)

让我们从基础开始。

首先,列出五组

  1. [0-9]{4}
  2. [0-9]
  3. [0-9]{1,2}
  4. [0-9]{1,4}
  5. RE
  6. 接下来,列出四种变体

    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
    5. 最后,把它们放在一起。

      ^([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)?)?)?$