PHP str_replace 函数

标签 php str-replace

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

$value = "gal($data)";

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

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

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

最佳答案

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

关于PHP str_replace 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594487/

相关文章:

php - str_replace 不适用于某些字符

php - 基于css3渐变设置用php生成图像?

string - 如何用多个值替换perl中的字符串

php - 如何从动态创建的php表中收集数据

php-mysql电子邮件联系进口商

php - 如何从php中的字符串中删除括号?

php - MySQL、PHP;在比较之前编辑列值

php - 删除句号前的空格? str_replace

php - 有没有一种简单的方法可以防止 MySQL 行 ID 增长?

php - 在 CakePHP 中,您如何确定字段是否在编辑操作中被更改?