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

 <?php 
echo preg_replace_callback('〜 - ([az])〜',function( $ match){
// return strtoupper($ match [1]);
var_dump($ match);
},'hello-world');
?>
</ code> </ pre>

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

  array(2){[0] =&gt;  string(2)“ -  w”[1] =&gt;  string(1)“w”} helloorld 
</ code> </ pre>

任何人都知道可能会发生什么? </ p>

感谢。 </ p>
</ div>

展开原文

原文

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

This is a modification on the Example #1 on http://php.net/manual/en/functions.anonymous.php . The var_dump within the anonymous function outputs this:

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

Anybody has an idea what may be going on?

Thanks.

php
dousheng3364
dousheng3364 为什么“helloorld”不在数组中,为什么它被修改,意味着不是“helloworld”,因为我们正在寻找[a-z]。
大约 3 年之前 回复
douzhang3356
douzhang3356 没有什么不对的。相反,你应该解释你的期望。
大约 3 年之前 回复

2个回答



这应该 解释正则表达式部分。
现在 echo </ code>部分缺少 -w </ code>:正如你所看到的, preg_replace_callback </ code> $ match </ code>执行操作。 由于 $ match [0] </ code>是匹配的字符串, preg_replace_callback </ code>期望替换为匿名函数中的返回值。 您已在示例中跳过该部分,因此替换为空。</ p>
</ div>

展开原文

原文

This should explain the regex part. Now to the echo part where -w is missing: as you can see, preg_replace_callback does operations on $match. Since $match[0] is your matched string, preg_replace_callback expects a replacement as return value in the anonymous function. You have skipped that part in your example, thus, the replacement is empty.



在你的代码中</ p>

  echo preg_replace_callback('〜 - ([az])  〜',function($ match){
// return strtoupper($ match [1]);
var_dump($ match);
},'hello-world');
</ code> </ pre>

您正在尝试将 - ([az])</ code>( -w </ code>与匹配)替换为 nothing </ strong> ,因为你的回调返回</ strong>没有。</ p>

因此,将 -w </ code>替换为字符串<中的任何内容(将其转换为空字符串) code> hello-world </ code>为您提供 helloorld </ code>。</ p>
</ div>

展开原文

原文

In your code

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

You're trying to replace -([a-z]) (-w matches it) with nothing, as your callback returns nothing.

So, replacing -w with nothing (which is casted to empty string) in string hello-world gives you helloorld.

doulan4939
doulan4939 谢谢(你的)信息。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐