正则表达式错了吗?

时间:2016-03-15 18:34:17

标签: php regex

我做错了什么?它仍会返回21-11-2016

$string = '21-11-2016';
$pattern = '/({0-9}(2))-({0-9}(2))-({0-9}(4))/';
$rep = "Month: $2 , Day: $1 , Year: $3";
echo preg_replace($pattern, $rep, $string); 
die();

4 个答案:

答案 0 :(得分:2)

您在错误的地方{..}(..)。使用:

echo preg_replace('/([0-9]{2})-([0-9]{2})-([0-9]{4})/', $rep, $string);

{...}使其成为范围,[...]使其成为一个字符类。

答案 1 :(得分:1)

这是你想要的模式:

$pattern = '/(\d{2})-(\d{2})-(\d{4})/';

工作示例:https://3v4l.org/LYhvB

但是,使用正则表达式解析日期并不是一个好习惯。使用内置日期功能!

答案 2 :(得分:0)

因为那不是有效的正则表达式。您的[]{}已被撤消。

[]定义字符类和范围,例如[0-9]是“所有数字” {}定义数量。例如{2}表示“之前的两个” ()定义了一个捕获组。 (2)毫无意义。 - 你只是捕获一个固定的2

由于您的版本是向后的,因此使用无效的{}范围会出现语法错误,并且无论如何都无法匹配任何内容。

尝试

/([0-9]{2}-([0-9]{2})-([0-9]{4})/

代替

答案 3 :(得分:0)

你的括号和大括号搞砸了。它应该是这样的。

([0-9]{2})-([0-9]{2})-([0-9]{4})

Regex101 Demo