Preg_match_all时间捕获多个PHP

时间:2015-06-01 13:43:02

标签: php regex

我希望使用preg_match_all()抓住的格式:

  • 12.00
  • 10:00
  • 上午10点
  • 13pm
  • 晚上8点
  • 早上7点
  • 1830
  • 下午2点15分
  • 上午09点45分

到目前为止我的正则表达式:

/((\d{1,2}|\d{4})(.\d{1,2}))(am|pm)*/i

任何帮助都非常感激,我似乎无法抓住5& 6与当前的正则表达式。

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

/\b(\d{1,2})([.:]?\d{1,2})?([ap]m)?\b/i

RegEx Demo

正则表达式的分解:

\b       # word boundary
\d{1,2}  # match 1 or 2 digits for hours
[.:]?    # match *optional* dot or colon i.e. minute separator
\d{1,2}  # match 1 or 2 digits for minutes
([ap]m)? # match *optional* am/pm
\b       # word boundary

答案 1 :(得分:1)

怎么样:

/^(\d{1,2})([.:]?\d{1,2})?(am|pm)?$/i

<强>解释

/                   : regex delimiter
  ^                 : begining of string
    (               : capture group 1
      \d{1,2}       : one or two digit
    )               : end group 1
    (               : capture group 2
      [.:]?         : optional . or :
      \d{1,2}       : one or two digit
    ),              : end group 2 otional
    (am|pm)?        : am or pm optional
  $                 : end of string
/i                  : regex delimiter with caseinsensitive flag