在使用正则表达式提供的字符串中替换日期格式

时间:2013-04-16 13:46:48

标签: php regex date

我正在尝试更改可能包含日期的字符串,例如

"This is the test string with 22/12/2012. 23/12/12 could anywhere in the string"

我需要更改上面的字符串,以便日期格式为d-m-y,即

"This is the test string with 22-12-2012. 23-12-12 could appear anywhere in the string"

修改 请注意,日期可能会以年为单位改变,即2012年或12月可以在时间使用,即2012年6月20日,2012年6月20日。只有年份可以是2或4位数,休息时间相同。

任何帮助都将受到高度赞赏。

干杯,

3 个答案:

答案 0 :(得分:3)

使用preg_replace,如下所示:

$repl = preg_replace('~(\d{2})/(\d{2})/(\d{2,4})~', '$1-$2-$3', $str);

现场演示:http://ideone.com/7HDNZa

答案 1 :(得分:0)

$string = preg_replace("/([0-9]{2})\/([0-9]{2})\/([0-9]{2,4})/", "$1-$2-$3", $string);

正则表达式将找到3个由2个数字(或2x2 + 1x4)分隔的数字,并用-s分隔相同的数字替换它们。

答案 2 :(得分:0)

您可以尝试这样的事情:

preg_replace('~\b([0-2]?[1-9]|3[01])/(0?[1-9]|1[0-2])/(?=(?:\d\d|\d{4})\b)~', '$1-$2-', $str);

仅应与有效日期匹配。匹配前缀0不存在的日期,例如4/16/13如果这不可取消,请删除前两个问号([0-2]?0?