[英]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.