我正在编写一个PHP应用程序,我有一个
形式的输入字符串Hello world. Hello [fbes_keep]world[/fbes_keep].
表格中的新字符串
Hallo welt. Hello.
我希望输入字符串被新字符串替换,除了 [fbes_keep]
标记中的部分,因此输出为
Hallo welt. Hello [fbes_keep]world[/fbes_keep].
我当前的方法涉及使用finediff library但重写删除操作码以查找fbes
标记。昨天我问a question这个问题,但我觉得我可能遇到了XY问题。 有更好的方法吗?
编辑: Gist包含当前(非功能)代码和实际测试用例。
答案 0 :(得分:0)
也许这不是最优雅的方式我该怎么做,但我已经测试了它,它完成了这项工作:
$expression = 'world';
$newExpression = 'welt';
$str = 'Hello world. Hello [fbes_keep]world[/fbes_keep]. Here are some other world, and [fbes_keep]other[/fbes_keep] word in fbes.';
$pattern = '/\[fbes_keep\].*?\[\/fbes_keep\]/i';
$fbKepps = [];
preg_match_all($pattern, $str, $fbKepps);
$others = preg_split($pattern, $str);
$result = '';
$i = 0;
foreach ($others as $other) {
$result .= preg_replace('/' . addslashes($expression) . '/', $newExpression, $other);
$i++;
if ($i < count($others)) {
$result .= $fbKepps[0][$i - 1];
}
}
echo $result;
<强>输出强>
Hello welt. Hello [fbes_keep]world[/fbes_keep]. Here are some other welt, and [fbes_keep]other[/fbes_keep] word in fbes.
我的意思是将字符串拆分为[fbes_keep]...[/fbes_keep]
,但在将它们存储在数组中之前。然后迭代所有其余部分,将world
更改为welt
,然后将下一个fbes_keep
连接起来,依此类推......
它保留了所有内容[fbes_keep]anything[/fbes_keep]
,并且有多个fbes_keep也可以与其他单词串在一起。