繁体   English   中英

PHP str_replace功能

[英]PHP str_replace with function

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

$value = "gal($data)";

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

gal($data)是一个函数,我需要为该函数替换一个代码并显示,但是脚本最终只给了我这个gal($data) ,而函数没有显示任何内容

是否可以使用str_replace()替换代码并通过函数或某些类似方法进行替换?

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

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

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传递匹配项,然后我们可以返回适当的值或原始值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM