如果条件在PHP中的preg_replace内

时间:2014-04-01 05:02:20

标签: php preg-replace

我想在条件为真的情况下在替换文本中添加注释。

这是我使用的基本代码。

<?php
$keepcomments="yes"; //yes or no
$str="abcdefgh";
$str = preg_replace("~abcd~", 'dcba "if($keepcomments=="yes"){ echo"-- some comments here --"} ', $str);
echo $str;
?>

我尝试过:

if ($keepcomments=="yes"){ 
$str = $str."<-- some comments here -->";
}

结果是:

dcbaefgh-- some comments here --

但我必须更多行preg_replace,问题是当我这样做时,所有注释都出现在结果字符串的末尾。

dcbaefgh
dcbaefgh
dcbaefgh
-- some comments here --
-- some comments here --
-- some comments here --

我不知道在这种情况下如何使用preg_replace_callback()

任何帮助都将不胜感激。

修改

当字符串为“abcdefgh”时,我想用“dcba”替换该字符串中的“abcd”。同时,如果$keepcomments为是,那么我想在该字符串的末尾添加注释。 然后我想在几行中复制相同的代码。 预期产出是:

dcbaefgh-- some comments here --
dcbaefgh-- some comments here --
dcbaefgh-- some comments here --

3 个答案:

答案 0 :(得分:2)

使用回调函数:

$str = preg_replace_callback("~(abcd)(.*)~", function($match) use ($keepcomments) {
    $r = strrev($match[1]) . $match[2];

    if ($keepcomments == 'yes') {
        return $r . '-- some comments here --';
    } else {
        return $r;
    }
}, $str);

答案 1 :(得分:0)

$str=array("abcdefgh","dfgvdfg","rgerhg");

foreach($str as &$row)
{
if ($keepcomments=="yes"){ 
$row= $row."<-- some comments here -->";


}
}

答案 2 :(得分:0)

jack的答案解决了这个问题:https://stackoverflow.com/a/22777242/1940720

我不得不改变一些事情。我在这里提交最终答案,也许会对某人有帮助。

$str = preg_replace_callback("~(replace-string-here)(.*)~", function($match) use ($keepcomments) {
    if ($keepcomments == 'yes') {
        return  'string -- comments -- ';
    } else {
        return 'string';
    }
}, $str);