我想使用preg_replace替换具有值的主题中的令牌。 主题中的令牌是问号或命名参数。 (认为PDO风格)PHP preg_replace:忽略替换值中的匹配
我目前的方法工作正常,直到其中一个值包含问号本身。 (或一个命名变量)。在这种情况下,整个系统变坏:被替换值中的问号本身被下一个值替换。
基本上,我不想替换在$ values数组中找到的任何东西。所以preg_replace的“递归”性质就是我想要阻止的事情。
周围的最佳方式是什么?
孤立的例子:
<?php
// Values that will be replaced
$values = array (1, 2, 'bla bla ? bla', 'NULL', 4, 'woop woop', 'waap waap');
// Keys used for replacing
$keys = array ('/[?]/', '/[?]/', '/[?]/', '/[?]/', '/[?]/', '/:testvar1/', '/:testvar2/');
// Original text
$original = ":testvar1, ?, ?, ?, ?, ?, :testvar2";
// Actual replaced text
$actual = preg_replace ($keys, $values, $original, 1);
// Expected replaced text
$expected = "woop woop, 1, 2, bla bla ? bla, NULL, 4, waap waap";
echo '<pre>';
echo "Actual:\n";
echo $actual . "\n\n";
echo "Expected:\n";
echo $expected . "\n\n";
echo "Result:\n";
if ($actual == $expected)
{
echo '<span style="color: green;">Success!</span>';
}
else
{
echo '<span style="color: red;">Failure!</span>';
}
任何提示吗? :-) 谢谢!
这并没有解决问题,它只是推回来。如果替换包含'?,'会怎么样? –
“但是,如果您的替换值包含问号后跟逗号,则会再次遇到此情况。” – InitHello
所以你知道这个问题......你会如何解决它? –