我是初学者,所以这可能是一个简单的答案。 我有这个功能:
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');
它回显正确的间隔字符串。
我做错了什么?
答案 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);
}
答案 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;
答案 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);