解释我问题的最好方法就是向你展示。
输入字符串:
/04-11-2010/12:45/获取日期和时间部分的正则表达式:
preg_match('@/(\d\d)-(\d\d)-(\d\d\d\d)/(\d\d):(\d\d)/@', $input, $matches);PHP匹配数组:
Array
(
[0] => /01-11-2010/12:45/
[1] => 01
[2] => 11
[3] => 2010
[4] => 12
[5] => 45
)现在,上面的regex非常适合于获取表示输入字符串中的日期和时间的各个组件部分。
问题是,时间部分需要是可选的,而不需要降低整个正则表达式。
问题输入字符串:
/04-11-2010//PHP匹配数组
Array
(
)基本上,匹配数组需要返回的内容是:
Array
(
[0] => /01-11-2010/12:45/
[1] => 01
[2] => 11
[3] => 2010
[4] =>
[5] =>
)注数组元素4和5仍然需要存在,但返回空。
发布于 2010-02-24 00:00:40
使用问号运算符和非捕获组使内容成为可选的。
@/(\d\d)-(\d\d)-(\d\d\d\d)/(?:(\d\d):(\d\d))?/@我不确定这是如何与匹配数组交互的--如果拥有空数组元素是绝对关键的,那么您可能需要选择
@/(\d\d)-(\d\d)-(\d\d\d\d)/((?:\d\d)?):?((?:\d\d)?)/@它有自己的假阳性(现在冒号是可选的)。
发布于 2010-02-23 23:59:12
使第二部分可选:
'@/(\d\d)-(\d\d)-(\d\d\d\d)/(?:(\d\d):(\d\d))?/@'这里使用的非捕获组(?:…)不能被引用,因此不会更改匹配的组。
发布于 2010-02-24 00:04:20
@/(\d\d)-(\d\d)-(\d\d\d\d)/((?:\d\d)?):?((?:\d\d)?)/@做你想要的(即填充第4组和第5组),但也接受不完整的时间,如
/04-11-2010/12:/不知道这对你来说是否好
https://stackoverflow.com/questions/2322708
复制相似问题