我做错了什么?它仍会返回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();
答案 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})/';
但是,使用正则表达式解析日期并不是一个好习惯。使用内置日期功能!
答案 2 :(得分:0)
因为那不是有效的正则表达式。您的[]
和{}
已被撤消。
[]
定义字符类和范围,例如[0-9]
是“所有数字”
{}
定义数量。例如{2}
表示“之前的两个”
()
定义了一个捕获组。 (2)
毫无意义。 - 你只是捕获一个固定的2
。
由于您的版本是向后的,因此使用无效的{}
范围会出现语法错误,并且无论如何都无法匹配任何内容。
尝试
/([0-9]{2}-([0-9]{2})-([0-9]{4})/
代替
答案 3 :(得分:0)