我想在条件为真的情况下在替换文本中添加注释。
这是我使用的基本代码。
<?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 --
答案 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);