PHP str_replace 函数

Posted

技术标签:

【中文标题】PHP str_replace 函数【英文标题】:PHP str_replace with function 【发布时间】:2012-11-27 22:40:21 【问题描述】:

是否可以使用str_replace() 并在替换中使用函数?

$value = "gal($data)";

$replace = str_replace($dat, $value, $string);

gal($data) 是一个函数,我需要为这个函数替换一个代码并显示,但脚本最终只给了我这个 gal($data),以及函数不显示什么

是否可以使用str_replace() 替换代码并用函数或类似方法替换?

【问题讨论】:

【参考方案1】:

php 有一个名为preg_replace_callback 的函数来执行此操作。当您向它传递一个回调函数时,它将通过您的函数传递每个匹配项。您可以根据匹配的值选择替换或忽略它。

例如,假设我有一个匹配各种字符串的模式,例如[a-z]+。我可能不想用相同的值替换每个实例,所以我可以在找到匹配项时调用一个函数,并确定我应该如何响应:

function callback ($match) 
    if ($match[0] === "Jonathan")
        return "Superman";
    return $match[0];


$subject = "This is about Jonathan.";
$pattern = "/[a-z]+/i";
$results = preg_replace_callback($pattern, "callback", $subject);

// This is about Superman.
echo $results;

在我们的回调函数中注意我如何能够为某些匹配返回特殊值,而不是所有匹配。

扩展缩写

另一个例子是查找。假设我们想找到编程语言的缩写,并用它们的完整名称替换它们。我们可能有一个以缩写作为键,以长名称作为值的数组。然后我们可以使用我们的回调功能来查找全长名称:

function lookup ($match) 
    $langs = Array(
        "JS"  => "javascript", 
        "CSS" => "Cascading Style Sheets", 
        "JSP" => "Java Server Pages"
    );
    return $langs[$match[0]] ?: $match[0];


$subject = "Does anybody know JS? Or CSS maybe? What about PHP?";
$pattern = "/(js|css|jsp)/i";
$results = preg_replace_callback($pattern, "lookup", $subject);

// Does anybody know JavaScript? Or Cascading Style Sheets maybe? What about PHP?
echo $results;

所以每次我们的正则表达式找到一个匹配,它通过lookup传递匹配,我们可以返回适当的值,或者原始值。

【讨论】:

我不知道这个功能你能告诉我在这种情况下如何使用它,谢谢你的帮助 @user1851816 也许我对你在问什么感到困惑。我建议的函数将让您通过可调用函数执行字符串替换。这让您可以在替换方式、替换时间以及替换内容中添加更多逻辑,而不是直接进行 1:1 字符串替换。 如果你能告诉我如何修改代码很简单,我在 3 天前尝试了这个,但没有得到这一点,因为工作正常,谢谢大家 感谢您的帮助,我现在了解该功能的工作原理,感谢所有和您的时间,问候!

以上是关于PHP str_replace 函数的主要内容,如果未能解决你的问题,请参考以下文章

PHP str_replace()字符串匹配

php中的字符串常用函数 str_replace 字符串替换

PHP str_replace() 在用户定义的函数中不起作用

PHP字符串替换str_replace()函数4种用法详解

PHP替换字符串-str_replace

利用PHP str_replace()函数替换符合百度MIP内容标准