我试图从一个字符串创建共同的面具,像这样:如何替换字符串中的多个字符串而不重叠结果?
012abc.d+e_fg~hijk => 012{start}.d+{middle}_fg~{end}jk
取代:
$arrFromTo = array(
'st' => '{pre}',
'abc' => '{start}',
'e' => '{middle}',
'hi' => '{end}',
'dd' => '{post}'
);
相反,我不断重复更换和得到这样的事情,而不是(使用str_replace
循环“词):
012{{pre}art}.d+{mi{post}le}_fg~{end}jk
由于st
在已经找到替换{start}
和dd
位于{middle}
。
您将如何替换以下内容?
$str = 'abc.d+e_fg~hijk';
echo replace_vars($str); // Desired output: 012{start}.d+{middle}_fg~{end}kJ
我在想重新排列数组,所以''dd'=>'{post}''处于不同的位置,但这引发了其他问题。 – 2014-10-28 20:28:26
这不是我经常建议的正则表达式,但在这种情况下,它可能是谨慎的,所以你执行lookahead/behinds来检查你在替换之前的期望是什么 – 2014-10-28 20:34:30
@scrowler不幸的是,我的PCRE库中有一个可变长度消极后台的bug。我无法升级PCRE库,因此我停止了这一步。 – Ryan 2014-10-28 20:48:04