使用Preg_Replace_Callback函数

时间:2016-02-18 05:42:48

标签: php

好的,我认为此页面上的搜索栏被破坏的原因是因为PHP已更新,并且preg_replace已弃用。 https://sparklewash.com/

我尝试将preg_replace函数替换为preg_replace_callback,但我仍然遇到了一些问题。

原始

function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.

}

新版本:

function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   return preg_replace_callback('/(^|_)([a-z])/', 
   create_function ('$matches', 'return strtoupper($matches[2]);'), $string); // Removes special chars.
}

我很抱歉,如果这对你来说很容易,我试着在这里写一篇文章,但我还是比较新的PHP。

编辑:我相信preg_replace并不是因为某些评论而导致其破坏的原因。我在这里提出了一个新问题,以保持主题:Redirect Loop on $_GET Request

1 个答案:

答案 0 :(得分:0)

我不推荐您使用的语法,最有可能导致错误,请尝试以下语法。

$result = preg_replace_callback('/(^|_)([a-z])/', function($matches){

   return strtoupper($matches[0]);
   /*
   $matches[0] is the complete match of your regular expression 
   $matches[1] is the match of the 1st round brackets () similarly for $matches[2]...and so on.

   */

}, $string);

//Also $result will contain the resultant string

你必须将$ match传递给你的回调函数,你也可以单独声明回调,作为一个独立的函数。

function make_upper($matches){

   return strtoupper($matches[0]);

}
$result = preg_replace_callback('/(^|_)([a-z])/','make_upper' , $string);

希望我的解决方案适合您,谢谢。 :)