我想使用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
所以你知道這個問題......你會如何解決它? –