代码之家  ›  专栏  ›  技术社区  ›  Sunny

xxxxrcyyyymmddnnnn的正则表达式

  •  0
  • Sunny  · 技术社区  · 9 年前

    我正在尝试制作一个适用于 XXXXRCYYYYMMDDnnnnnnnn

    ^[A-Z]{6}(?<!\\d)(?:(?:20\\d{2})(?:(?:(?:0[13578]|1[02])31)|(?:(?:0[1,3-9]|1[0-2])(?:29|30)))|(?:(?:20(?:0[48]|[2468][048]|[13579][26]))0229)|(?:20\\d{2})(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\\d|2[0-8]))(?!\\d){8}([\\d]{8}$
    

    XXXXRC 是6个字符和 是日期,n是任意数字。

    这是为了 然后 然后寻找 8个数字

    它不起作用了。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Kyle Falconer    9 年前

    选项1:

    使用捕获组分解值,然后检查捕获组内的值是否匹配有效日期:

    ^([\w]{4})([\w]{2})([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{8})$
    

    ABCDZY1999123101234567 分为以下几组:

    (ABCD)(ZY)(1999)(12)(31)(01234567)
    ^     ^   ^     ^   ^   ^
    |     |   |     |   |   |
    |     |   |     |   |   group 5
    |     |   |     |   group 4
    |     |   |     group 3
    |     |   group 2
    |     group 1 
    group 0
    

    regex101.com .

    选项2:

    采用上述方法,但在数字捕捉组方面要更有创意,只包括所需的日期范围。看见 Matching Numeric Ranges with a Regular Expression

    上述站点的示例:

    • 000..255: ^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$
    • 0或000。。255: ^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$
    • 0或000。。127: ^(0?[0-9]?[0-9]|1[01][0-9]|12[0-7])$
    • ^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$

    然而,这种方法是 非常