什么是此日期格式的preg表达式

时间:2013-11-09 17:41:29

标签: php regex

我想在PHP中只从字符串中获取日期。这个日期格式的preg表达式是什么:

24/11/2013

我在日期之前和之后都有其他字符串,如下所示:  Hello d2 your date is 24/11/2013 thank you。  我试过这个:

preg_match('(\d{2})(/)(\d{2})(/)(\d{4})$',  $my_date_s, $matches);

但这显示错误

2 个答案:

答案 0 :(得分:1)

preg_match('~^\d{2}/\d{2}/\d{4}$~', $my_date_s, $matches);

主要的是你没有包括分隔符。我添加了一个字符串锚点的开头,因为你有一个字符串一的结尾..但很难知道正则表达式是否适合你而不看你的内容..这个模式假定字符串中只有 的东西是你的约会对象。

因此,如果它是一个包含其他内容的字符串中的日期,请执行以下操作:

preg_match('~\b\d{2}/\d{2}/\d{4}\b~', $my_date_s, $matches);

另外,仅供参考,这只是一个简单的验证..它验证格式,但不是如果它是真实的日期。如果您想将其验证为真实日期,可以/ explode然后使用checkdate

答案 1 :(得分:1)

由于未在表达式中提供开始和结束分隔符,因此无法匹配任何内容。分隔符可以是任何非字母数字,非反斜杠,非空白字符。

请参阅PHP: Delimiters

preg_match('~\b\d{2}/\d{2}/\d{4}\b~',  $my_date_s, $match);
echo $match[0];

正则表达式:

\b          the boundary between a word char (\w) 
            and something that is not a word char
\d{2}       digits (0-9) (2 times)
 /          '/'
\d{2}       digits (0-9) (2 times)
 /          '/'
\d{4}       digits (0-9) (4 times)
\b          the boundary between a word char (\w) 
            and something that is not a word char