经过大量的搜索和阅读,我不能确定我想要做的是一步到位.我想要它匹配这个:
(\d{1,4})/(\d{1,2})/(\d{1,2})
2011/12/13
Run Code Online (Sandbox Code Playgroud)
或这个
(\d{1,2})/(\d{1,4})/(\d{1,2})
12/2011/13
Run Code Online (Sandbox Code Playgroud)
或这个
(\d{1,2})/(\d{1,4})/(\d{1,2})
12/13/2011
Run Code Online (Sandbox Code Playgroud)
在一个正则表达式中捕获括号中的值.
所以我做的就是将这三个包装成非捕获or语句:
^(?:(\d{1,4})/(\d{1,2})/(\d{1,2}))|(?:(\d{1,2})/(\d{1,4})/(\d{1,2}))|(?:(\d{1,2})/(\d{1,2})/(\d{1,4}))$
Run Code Online (Sandbox Code Playgroud)
唯一的问题是如果在此使用它
2011/12/13
Run Code Online (Sandbox Code Playgroud)
我得到的是这个:
2100
10
10
Empty
Empty
Empty
Empty
Empty
Empty
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢空的捕捉.我可以设置它们,这样只返回非mpty字符串吗?!
我可以想到许多变通方法仍然可以完成这项工作,首先匹配正确的模式,然后匹配正确的捕获,检查捕获的值是否有多个空字符串,但在我看来这应该是可能的在正则表达式本身.
任何帮助是极大的赞赏.
谢谢 :)
怎么样:
^(?:(?=\d{1,4}/\d{1,2}/\d{1,2})|(?=\d{1,2}/\d{1,4}/\d{1,2})|(?=\d{1,2}/\d{1,2}/\d{1,4}))(\d+)/(\d+)/(\d+)$
Run Code Online (Sandbox Code Playgroud)
3前瞻确保您有3种格式中的任何一种格式的日期,然后捕获日期的3个元素.
说明:
^ : begining of the string
(?: : begin non capture group
(?=\d{1,4}/\d{1,2}/\d{1,2}) : assume the format is yyyy/mm/dd
| : or
(?=\d{1,2}/\d{1,4}/\d{1,2}) : format dd/yyyy/mm
| : or
(?=\d{1,2}/\d{1,2}/\d{1,4}) : format dd/mm/yyyy
) : end of non capture group
(\d+)/(\d+)/(\d+) : capture the 3 elements
$ : end of string
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3001 次 |
| 最近记录: |