PHP函数说明

时间:2013-09-26 12:46:39

标签: php regex function

我是初学者,所以这可能是一个简单的答案。 我有这个功能:

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 个答案:

答案 0 :(得分:2)

来自PHP manual

  

如果找到匹配项,新主题将返回,否则主题将保持不变,如果发生错误则返回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);
}

Demo!

答案 1 :(得分:2)

您需要在return语句或变量中返回preg_replace的值,即:

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

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

查看PHP Manual

答案 2 :(得分:1)

preg_replace返回一个字符串,不会修改输入字符串。将函数中的第三行更改为

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

etvoilà!

答案 3 :(得分:1)

您必须将preg_replace函数返回的值赋给变量:

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