带有var_dump的preg_replace_callback()的异常输出

时间:2017-08-19 07:48:17

标签: php

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    //return strtoupper($match[1]);
        var_dump($match);
    }, 'hello-world');
?>

这是对http://php.net/manual/en/functions.anonymous.php上的示例#1的修改。匿名函数中的var_dump输出:

array(2) { [0]=> string(2) "-w" [1]=> string(1) "w" } helloorld

任何人都知道可能会发生什么?

感谢。

2 个答案:

答案 0 :(得分:2)

This should explain the regex part. 现在到echo缺少-w的部分:如您所见,preg_replace_callback$match执行操作。由于$match[0]是您匹配的字符串,preg_replace_callback期望在匿名函数中将替换值作为返回值。您已在示例中跳过该部分,因此替换为空。

答案 1 :(得分:1)

在您的代码中

echo preg_replace_callback('~-([a-z])~', function ($match) {
    //return strtoupper($match[1]);
    var_dump($match);
}, 'hello-world');

您正在尝试将<{1}}(-([a-z])匹配)与替换,因为您的回调会返回

因此,在字符串-w中将-w替换为空(无法转换为空字符串)会为您提供hello-world