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

您需要在 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 手册

于 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返回一个字符串并且不修改输入字符串。将函数中的第三行更改为

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

等等!

于 2013-09-26T12:49:03.950 回答