正则表达式检查重复

Bar*_*run 10 c# java regex

我正在尝试使用正则表达式检查文本行.

1,3,4,5,8,10,12,14,19,14
Run Code Online (Sandbox Code Playgroud)

这里的数字用','分隔,并且应该是非negetive并且小于或等于20.并且任何数字都不应该重复.这是我的模式.

^(?:(?:0[1-9]|[1-9]|1[0-9]|20),)*(?:0[1-9]|[1-9]|1[0-9]|20)$
Run Code Online (Sandbox Code Playgroud)

但它无法检查重复.我怎么检查呢?

ste*_*ema 7

你想做的不是那么复杂.如果字符串中再次出现此数字,您只需在每个匹配的数字后检查:

^(?:(0[1-9]|[1-9]|1[0-9]|20),(?!.*\b\1\b))*(?:0[1-9]|[1-9]|1[0-9]|20)$
Run Code Online (Sandbox Code Playgroud)

在Regexr上查看并测试它.

在C#中:

string[] myStrings = { "1",
    "1,2",
    "01,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20",
    "01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20",
    "01,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,5",
    "01,02,03,04,05,06,07,08,13,09,10,11,12,13,14,15,16,17,18,19,20" };

Regex reg = new Regex(
    @"^
        (?:(0[1-9]|[1-9]|1[0-9]|20),
            (?!.*\b\1\b) # Fail if the before matched number occurs once more
        )*
        (?:0[1-9]|[1-9]|1[0-9]|20)
    $",
    RegexOptions.IgnorePatternWhitespace
);

foreach (string myString in myStrings)
    Console.WriteLine("{0} {1} a valid string.",
        myString,
        reg.IsMatch(myString) ? "is" : "is not"
    );

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)