preg replace在php中不替换
我有这样的代码来替换php日期中的模式preg replace在php中不替换,php,regex,date,preg-replace,Php,Regex,Date,Preg Replace,我有这样的代码来替换php日期中的模式 $input = preg_replace('/\/\-\.\_\s/', '-', $date); 如果我以mm/dd/yyyy的形式传递日期,preg\u replace只会返回传递的日期 预期输出应为mm dd yyyy 可能有什么问题要替换为-的字符集属于[]字符类。在那里,不需要转义 $out = preg_replace('#[/._\s]#', '-', $date); 当您将/作为预期字符之一处理时,建议使用不同的字符,如#作为分隔符
$input = preg_replace('/\/\-\.\_\s/', '-', $date);
如果我以mm/dd/yyyy
的形式传递日期,preg\u replace只会返回传递的日期
预期输出应为mm dd yyyy
可能有什么问题要替换为
-
的字符集属于[]
字符类。在那里,
不需要转义
$out = preg_replace('#[/._\s]#', '-', $date);
当您将/
作为预期字符之一处理时,建议使用不同的字符,如#
作为分隔符
$date = '01/02/2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
$date = '01.02.2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
// Or mixed...
$date = '01 02/2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
在您的尝试中,未使用字符类
[]
导致表达式期望字符/-.\uS
按字面顺序连续。要替换为-
的字符集属于[]
字符类。在那里,
不需要转义
$out = preg_replace('#[/._\s]#', '-', $date);
当您将/
作为预期字符之一处理时,建议使用不同的字符,如#
作为分隔符
$date = '01/02/2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
$date = '01.02.2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
// Or mixed...
$date = '01 02/2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
在您的尝试中,未使用字符类
[]
导致您的表达式期望字符连续出现。您可能一心想使用正则表达式,在这种情况下,您可以忽略我的答案。但是,如果您想改进作为程序员所拥有的工具集,那么花一些时间学习PHP的日期/时间函数可能会对您有所帮助。以下是我如何处理您的问题:
将输入日期转换为UNIX时间戳。这只是日期/时间的整数表示形式。
使用PHP的strotime
函数来执行此操作()。它将“关于任何英文文本datetime描述”转换为Unix时间戳
将时间戳格式化为字符串,并按照您希望的方式进行格式化。
使用PHP的date
函数执行此操作()。这是一个非常通用和有用的功能
$properly_formatted_date = date('m-d-Y', $timestamp);
输出新格式化的日期。
当然,此解决方案不使用正则表达式。但是,我认为你的问题不需要正则表达式。事实上,如果输入发生变化(可能原始日期的格式不再是
mm/dd/yyyyy
,而是yyyy-mm-dd
),则需要更改正则表达式。但是strotime应该能够处理它,并且您的代码不需要更改。您可能一心想使用正则表达式,在这种情况下,您可以忽略我的答案。但是,如果您想改进作为程序员所拥有的工具集,那么花一些时间学习PHP的日期/时间函数可能会对您有所帮助。以下是我如何处理您的问题:
将输入日期转换为UNIX时间戳。这只是日期/时间的整数表示形式。
使用PHP的strotime
函数来执行此操作()。它将“关于任何英文文本datetime描述”转换为Unix时间戳
将时间戳格式化为字符串,并按照您希望的方式进行格式化。
使用PHP的date
函数执行此操作()。这是一个非常通用和有用的功能
$properly_formatted_date = date('m-d-Y', $timestamp);
输出新格式化的日期。
当然,此解决方案不使用正则表达式。但是,我认为你的问题不需要正则表达式。事实上,如果输入发生变化(可能原始日期的格式不再是
mm/dd/yyyyy
,而是yyyy-mm-dd
),则需要更改正则表达式。但是strotime应该能够处理它,并且您的代码不需要更改。您想做什么?您是否试图将/
或
更改为-
?您希望从什么输入中得到什么输出?对于可能出现的错误,我会说“使用preg_replace来操纵日期”。有,你想做什么?您是否试图将/
或
更改为-
?您希望从什么输入中得到什么输出?对于可能出现的错误,我会说“使用preg_replace来操纵日期”。有很多。