如何使用变量将字符串替换为另一个字符串

时间:2012-06-09 18:56:42

标签: php string variables preg-replace preg-match

问题:

我一直在想弄清楚如何使用PHP将变量中的字符串添加到许多不同的字符串中。

可变

$insert = 'icon-white';

字符串位于名为$ hyperlink的变量中:

$hyperlink = '<i class="icon-home"></i>';

期望的输出:

<i class="icon-home icon-white"></i>

欢迎任何建议,并提前致谢。

3 个答案:

答案 0 :(得分:2)

老实说,在这个特定的问题中我没有看到正则表达式带来的好处,所以我选择忽视这个方面;主要关注点似乎是在最后一个"字符之前插入新字符串,这可以通过以下方式实现:

$hyperlink = '<i class="icon-home"></i>';
$insert = ' icon-white'; // I've explicitly prefixed the new string with a space
$pos = strripos($hyperlink,'"',0);
echo substr_replace($hyperlink,$insert,$pos,0)

如果你更愿意,那么,为了将来的使用,这里有一个函数,它会在最后一次出现之前将一个给定的字符串($new)插入到另一个字符串($haystack)中给定字符($needle):

function insertBeforeLast($haystack,$needle,$new){
    if (!$haystack || !$needle || !$new){
        return false;
    }
    else {
        return substr_replace($haystack,$new,strripos($haystack,$needle),0);
    }
}

    echo insertBeforeLast('abcdefg','e','12',' ');

函数中0的右括号之前的substr_replace()表示新插入的字符串将在原始字符串中覆盖的字符数。


编辑修改上述功能,明确提供覆盖作为选项:

function insertBeforeLast($haystack,$needle,$new, $over){
    if (!$haystack || !$needle || !$new){
        return false;
    }
    else {
        $over = $over || 0;
        return substr_replace($haystack,$new,strripos($haystack,$needle),$over);
    }
}

    echo insertBeforeLast('abcdefg','e','12',0);

参考文献:

答案 1 :(得分:1)

这是如何使用preg_replace() php函数来满足您的需求:

$ php -a
Interactive shell

php > $oldvar = '<i class="icon-home"></i>';
php > $newvar = preg_replace('/(.*?".*?)"(.*)/', '\1 icon-white"\2 ', $oldvar);
php > echo $newvar;
<i class="icon-home icon-white"></i> 

答案 2 :(得分:0)

渲染输出时,你可以这样做;

<i class="icon-home <?= $insert ?>"></i>

如果您不希望它是有条件的。

如果你有变量;

$i = '<i class="icon-home"></i>';

你可以做;

$i = '<i class="icon-home ${insert}"></i>';