Console.WriteLine(Regex.IsMatch("15, 17-19", @"^\s*\d\d|\d\d\d\d\s*(?:-\s*\d\d|\d\d\d\d\s*)?(?:,\s*\d\d|\d\d\d\d\s*(?:-\s*\d\d|\d\d\d\d\s*)?)*$"));
但是,当我的^之后和$前加括号它不会
Console.WriteLine(Regex.IsMatch("15, 17-19", @"^(\s*\d\d|\d\d\d\d\s*(?:-\s*\d\d|\d\d\d\d\s*)?(?:,\s*\d\d|\d\d\d\d\s*(?:-\s*\d\d|\d\d\d\d\s*)?)*)$"));
谁能告诉我为什么?
更新:
我现在我原来的表达是错误的见。我应该有封闭在一个非捕获组我\d\d|\d\d\d\d
部分是这样的:
^\s*(?:\d\d|\d\d\d\d)\s*(?:-\s*(?:\d\d|\d\d\d\d)\s*)?(?:,\s*(?:\d\d|\d\d\d\d)\s*(?:-\s*(?:\d\d|\d\d\d\d)\s*)?)*$
这也可以写成
^\s*(?:\d{2}|\d{4})\s*(?:-\s*(?:\d{2}|\d{4})\s*)?(?:,\s*(?:\d{2}|\d{4})\s*(?:-\s*(?:\d{2}|\d{4})\s*)?)*$
这将使我增加额外的括号根据需要在不改变行为。谢谢。
不是问题的答案,但我肯定会考虑简化它 - 用'\ d {4}'替换'\ d \ d \ d \ d'以提高可读性,并使其更短。 – Spudley 2011-04-13 14:35:53