0

私は初心者なので、おそらくこれは簡単な答えになるでしょう。私はこの機能を持っています:

function str_space_uppercase($string){
    $tmp_string = $string;
    preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , $tmp_string);
    return $tmp_string;
}

私がそれを使用すると(例:)str_space_uppercase('ExampleSTring');関数は正しく呼び出されますが、返される値は変更されません(returns:'ExampleSTring')。

今明らかに私が使用する場合:

echo preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , 'ExampleSTring');

正しい間隔の文字列をエコーし​​ます。

私は何を間違っていますか?

4

4 に答える 4

2

PHPマニュアルから:

一致が見つかった場合、新しい件名が返されます。そうでない場合、件名は変更されずに返されるか、エラーが発生した場合は NULL が返されます。

preg_replace()ステートメントの結果を$tmp_string変数に格納していません。次のように保存する必要があります。

$tmp_string = preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , $tmp_string);

ただし、実際には一時変数を使用する必要はありません。

これで十分です:

function str_space_uppercase($string){
    return preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , $string);
}

デモ!

于 2013-09-26T12:49:16.740 に答える
2

You need to return the value of preg_replace either on the return statement or into a variable ie:

return preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , $tmp_string);

or

$tmp_string = preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , $tmp_string);
return $tmp_string;

take a look at the PHP Manual

于 2013-09-26T12:50:20.410 に答える
1

preg_replace 関数によって返された値を変数に代入する必要があります。

$tmp_string = preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , $tmp_string);
于 2013-09-26T12:51:37.990 に答える
1

preg_replace文字列を返し、入力文字列を変更しません。関数の 3 行目を次のように変更します。

$tmp_string = preg_replace('/(?<! )(?<!^)(?<![A-Z])[A-Z]/', ' $0' , $tmp_string);

ほら!

于 2013-09-26T12:49:03.950 に答える