我需要传递带有哈希值的字符串,然后将值更改为另一个值。我正在尝试以下代码:
$formula = "ARRED(((CAT(#AVSIM#+#AV#AT8+#AV#ATD+#AV#SIM+#AT))+#AV#SIMB);0.25;D)+0";
$formula = preg_replace('~(#AV#SIMB)([^\w]|$)~i', "Found", $formula);
RESULT = ARREDD(((QTDCAT2(#AVSIM#+#AV#AT8+#AV#ATD+#AV#SIM+#AT))+Found;0.25;D)+0
但是它删除了字符串中的下一个字符,我该如何更改呢?我需要一个仅删除使用特殊字符#
答案 0 :(得分:2)
您实际上是通过([^\w]|$)
(= (\W|$)
)捕获组来捕获该char的。因此,要将其保留在结果中,您需要在替换模式中添加thr $2
个占位符:
$formula = preg_replace('~(#AV#SIMB)([^\w]|$)~i', 'Found$2', $formula);
否则,请使用等效的非使用模式,即单词边界:
$formula = preg_replace('~#AV#SIMB\b~i', 'Found', $formula);
请参见PHP demo:
$formula = "ARRED(((CAT(#AVSIM#+#AV#AT8+#AV#ATD+#AV#SIM+#AT))+#AV#SIMB);0.25;D)+0";
echo preg_replace('~(#AV#SIMB)([^\w]|$)~i', 'Found$2', $formula) . "\n";
echo preg_replace('~(#AV#SIMB)\b~i', 'Found', $formula);
// => ARRED(((CAT(#AVSIM#+#AV#AT8+#AV#ATD+#AV#SIM+#AT))+Found);0.25;D)+0
// => ARRED(((CAT(#AVSIM#+#AV#AT8+#AV#ATD+#AV#SIM+#AT))+Found);0.25;D)+0