gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:38:19 24 4
gpt4 key购买 nike

我想在 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 函数知道将其解释为捕获的子模式的值,但 date 函数不知道。

您可以在 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);

(给出相同的输出)

关于php - 正则表达式替换php中的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13945018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com