c#中的正则表达式分组

本文关键字:正则表达式 | 更新日期: 2023-09-27 17:50:49

我正在尝试在c#中验证日期。

我需要检查以下格式:

dd/mm/yy
dd/mmm/yyyy
dd-mm-yy

下面的表达式抛出异常:

@"^(*'d{2}+[-'])+(['w{3}]|['d{2}])+('d{2,4})$"

请指出表达式中的错误

c#中的正则表达式分组

^('d{2})(['/-])('w{3}|'d{2})'2('d{2,4})$

我想你需要这个。

    `^(*`
       ^^

这个量词给出了错误,因为它没有什么可量化的。

看演示。https://regex101.com/r/tS1hW2/2

回答你关于正则表达式的问题,有几个问题。

  • 关键是(*一开始的问题(vks已经指出了)
  • 另一个关键问题是d{2}+
  • 中另一个错位的量词+
  • 还有一个问题是你在角色类中放置了替代品。(['w{3}]|['d{2}])+表示"从2个选项中选择:1)'w, {, 3}, 2) 'd, {, 2}, 1次或多次出现"。

那么,你的。net正则表达式样式将是这样的:

^('p{N}{2})([/-])('p{L}{3}|'p{N}{2})'2('p{N}{2,4})$

查看RegexStorm支持。net regex的演示

一个更通用的版本是^([0-9]{2})([/-])([a-zA-Z]{3}|[0-9]{2})'2([0-9]{2,4})$

然而,如果你想验证作为字符串写的DateTime值,你需要DateTime.TryParseExact它们。下面是一个符合您要求的示例:

var fmts = new[] { "dd/MM/yy", "dd/MMM/yyyy", "dd-MM-yy"}; // Allowed formats
DateTime dt;
var valid1 = DateTime.TryParseExact("13/02/15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid2 = DateTime.TryParseExact("10/Apr/2012", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid3 = DateTime.TryParseExact("23-02-10", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid4 = DateTime.TryParseExact("01-30-15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// false