注意:以下内容旨在作为一般性答案,并不试图解决 OP 的特定问题,因为它之前已经解决过。
是什么preg_replace_callback()
?
此函数用于执行正则表达式搜索和替换。它类似于str_replace()
,但不是纯字符串,而是搜索用户定义的正则表达式模式,然后将回调函数应用于匹配的项目。如果找到匹配项,该函数返回修改后的字符串,否则返回未修改的字符串。
我应该什么时候使用它?
preg_replace_callback()
与 -非常相似preg_replace()
- 唯一的区别是不是为第二个参数指定替换字符串,而是指定一个callback
函数。
preg_replace()
当您想要进行简单的正则表达式搜索和替换时使用。preg_replace_callback()
当您想要做的不仅仅是替换时使用。请参阅下面的示例以了解其工作原理。
如何使用它?
下面是一个例子来说明函数的用法。在这里,我们尝试将日期字符串从YYYY-MM-DD
格式转换为DD-MM-YYYY
.
// our date string
$string = '2014-02-22';
// search pattern
$pattern = '~(\d{4})-(\d{2})-(\d{2})~';
// the function call
$result = preg_replace_callback($pattern, 'callback', $string);
// the callback function
function callback ($matches) {
print_r($matches);
return $matches[3].'-'.$matches[2].'-'.$matches[1];
}
echo $result;
在这里,我们的正则表达式模式搜索格式的日期字符串,NNNN-NN-NN
其中N
可以是范围从0
-的数字9
(\d
是字符类的简写表示[0-9]
)。回调函数将被调用并传递给定字符串中匹配元素的数组。
最终结果将是:
22-02-2014
注意:以上示例仅用于说明目的。您不应该使用来解析日期。使用DateTime::createFromFormat()
andDateTime::format()
代替。这个问题有更多细节。