首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中简单正则表达式的问题

PHP中简单正则表达式的问题
EN

Stack Overflow用户
提问于 2010-02-23 23:56:53
回答 6查看 102关注 0票数 0

解释我问题的最好方法就是向你展示。

输入字符串:

代码语言:javascript
复制
/04-11-2010/12:45/

获取日期和时间部分的正则表达式:

代码语言:javascript
复制
preg_match('@/(\d\d)-(\d\d)-(\d\d\d\d)/(\d\d):(\d\d)/@', $input, $matches);

PHP匹配数组:

代码语言:javascript
复制
Array
(
    [0] => /01-11-2010/12:45/
    [1] => 01
    [2] => 11
    [3] => 2010
    [4] => 12
    [5] => 45
)

现在,上面的regex非常适合于获取表示输入字符串中的日期和时间的各个组件部分。

问题是,时间部分需要是可选的,而不需要降低整个正则表达式。

问题输入字符串:

代码语言:javascript
复制
/04-11-2010//

PHP匹配数组

代码语言:javascript
复制
Array
(
)

基本上,匹配数组需要返回的内容是:

代码语言:javascript
复制
Array
(
    [0] => /01-11-2010/12:45/
    [1] => 01
    [2] => 11
    [3] => 2010
    [4] => 
    [5] => 
)

注数组元素4和5仍然需要存在,但返回空。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-24 00:00:40

使用问号运算符和非捕获组使内容成为可选的。

代码语言:javascript
复制
@/(\d\d)-(\d\d)-(\d\d\d\d)/(?:(\d\d):(\d\d))?/@

我不确定这是如何与匹配数组交互的--如果拥有空数组元素是绝对关键的,那么您可能需要选择

代码语言:javascript
复制
@/(\d\d)-(\d\d)-(\d\d\d\d)/((?:\d\d)?):?((?:\d\d)?)/@

它有自己的假阳性(现在冒号是可选的)。

票数 2
EN

Stack Overflow用户

发布于 2010-02-23 23:59:12

使第二部分可选:

代码语言:javascript
复制
'@/(\d\d)-(\d\d)-(\d\d\d\d)/(?:(\d\d):(\d\d))?/@'

这里使用的非捕获组(?:…)不能被引用,因此不会更改匹配的组。

票数 1
EN

Stack Overflow用户

发布于 2010-02-24 00:04:20

代码语言:javascript
复制
  @/(\d\d)-(\d\d)-(\d\d\d\d)/((?:\d\d)?):?((?:\d\d)?)/@

做你想要的(即填充第4组和第5组),但也接受不完整的时间,如

代码语言:javascript
复制
    /04-11-2010/12:/

不知道这对你来说是否好

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2322708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档