我正在尝试做一个正则表达式,它将对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个字符,YYYYMMDD为日期,n为任意数字。
这查找的前6个字符,然后查找YYYYMMDD,然后查找8 numbers。
这不管用。
发布于 2017-09-21 05:47:12
备选案文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在这种情况下,组2、3和4将组成日期组件。您可以通过许多在线RegEx测试人员之一,比如regex101.com,来试验和验证这个正则表达式。
备选案文2:
采用上述方法,但在数字捕获组中获得更多的创造性,只包括所需的日期范围。请参阅用正则表达式匹配数字值域
上述网站的例子:
^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$^(0?[0-9]?[0-9]|1[01][0-9]|12[0-7])$^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$但是,这种方法很难维护,只有在不能单独使用选项1的情况下才能使用。
https://stackoverflow.com/questions/46336046
复制相似问题