2017-08-19 19 views
1
<?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はこれを出力します:var_dumpによるpreg_replace_callback()の異常出力

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

何が起こっている可能性がありますか?

ありがとうございました。

+1

__nothing__が間違っています。代わりに、あなたが期待していることを説明する必要があります。 –

+0

なぜ「helloorld」が配列から外れていて、なぜそれが変更されたのですか?つまり、「helloworld」ではなく、[a-z]を探しているからです。 –

答えて

2

This should explain the regex part. -wが欠落しているecho部分に:あなたが見ることができるよう、preg_replace_callback$matchの操作を行います。 $match[0]は一致した文字列なので、preg_replace_callbackは匿名関数の戻り値として置換が必要です。あなたの例では、その部分をスキップしているので、置換は空です。

1
あなたのコードで

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

あなたは、コールバック何も返さないよう、何も-([a-z])-w試合に)置き換えるしようとしています。

したがって、を(空の文字列にキャストされた)文字列hello-worldに置き換えると、helloorldとなります。今

+0

情報ありがとうございます。 –

関連する問題