繁体   English   中英

正则表达式替换php中的日期格式

[英]regular expression replace date format in php

我想使用正则表达式从PHP中的字符串替换日期格式。

我有一个像这样的字符串:

TEXT TEXT TEXT {POST_DATE,m/d/Y} TEXT TEXT TEXT

我希望将包含{POST_DATE,m / d / Y}的所有字符串替换为从外部函数(例如date())获取的日期,以及来自输入字符串的日期格式。

我已经尝试使用下面的代码,它只返回格式字符串:

$string = preg_replace('/\{POST_DATE,(.*)\}/',date('$1'),$template);

我在这里得到了返回字符串:

TEXT TEXT TEXT m/d/Y TEXT TEXT TEXT

我不确定我错在哪里,如果文本中有很多{POST_DATE,m / d / Y}字符串,那么如何按照上面的方式替换所有字符串。

日期函数传递的文字值为“$ 1”。 preg_replace函数知道将其解释为捕获的子模式的值,但日期函数不会。

您可以使用preg_replace中的“e”修饰符将$ 1传递给您的函数:

preg_replace('/\{POST_DATE,(.*?)\}/e','date("$1")',$input);

注意我还添加了一个?*非贪婪的? 之后的字符,因为如果输入字符串中有第二个}字符,则捕获的数量超过预期。

要测试这一点,请尝试以下操作:

$s = "TEXT TEXT TEXT {POST_DATE,m/d/y} TEXT TEXT TEXT";
print preg_replace('/\{POST_DATE,(.*?)\}/e','date("$1")',$s);

输出是:

TEXT TEXT TEXT 12/19/12 TEXT TEXT TEXT

为避免弃用代码,最好使用preg_replace_callback,尽管它并不优雅:

$s = "TEXT TEXT TEXT {POST_DATE,m/d/y} TEXT TEXT TEXT";
print preg_replace_callback('/\{POST_DATE,(.*?)\}/',
                            create_function('$matches',
                                            'return date($matches[1]);'),
                            $s);

(给出相同的输出)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM