我正在研究以下正则表达式:
^((199)[0-9] | 200 [0-9] | 201 [0-8])(0 [1-9] | 1 [0-2])(0 [1-9] | 1 \ d | 2 \ d |?3 [01])的 \ S [0-9] $
所以我有这个正则表达式,unbolded部分(空格前的前8个字符)工作正常。在第二部分(将是可选的),从我想要的空间开始:或。必填字符(至少一次)。
所以
19991019 will pass
19991019 1233 won't pass because does not include : or .
19991019 10:12:12 will passs
19991019 10.2.4 will pass
19991019123.1231.123 won't pass
19991019 aa.12.22 won't pass (because no letters are allowed)
答案 0 :(得分:1)
您需要添加如下可选模式:
^(199[0-9]|200\d|201[0-8])(0[1-9]|1[0-2])(0[1-9]|1\d|2\d|3[01])(?:\s+(\d+(?:[.:]\d+)+))?$
请参阅regex demo
(?:\s+(\d+(?:[.:]\d+)+))?
部分匹配1或0个序列:
\s+
- 一个或多个空格(\d+(?:[.:]\d+)+)
- 一个匹配的捕获组
\d+
- 一位或多位(?:[.:]\d+)+
- 一个或多个.
或:
序列后跟一个或多个数字请注意,您可以使用{min,max}
限制量词代替+
进一步调整此值。比如说,要匹配1到3位数,您可以使用\d{1,3}
。
答案 1 :(得分:0)
试试这个正则表达式:
((199)[0-9]|200[0-9]|201[0-8])(0[1-9]|1[0-2])(0[1-9]|1\d|2\d|3[01]) (?:(?:\d+(?:\.|:|$)){1,4})?
最后一部分将接受模式{digits} {dot / colon / end of string} 4次(你可以调整它)。
另外我想提一下,我不了解整体用例(针对上述用例进行测试),可能需要进行一些调整。