我想使用preg_replace_callback
填寫導入文檔中的變量(我控制),基於this answer,但它不起作用。據我所知,回調從不被調用,這意味着正則表達式永遠不會被匹配。簡單的正則表達式不工作使用preg_replace_callback()
我doc.html
文件的裸機內容:
<p>test {$test} $test test</p>
的PHP:
$test = "ham";
$allVars = get_defined_vars();
$filename = "/path/to/doc.html";
$html = file_get_contents($filename);
$html = preg_replace_callback("/\$[a-zA-Z_][a-zA-Z0-9_]*/", "find_replacements", $html);
echo($html);
exit();
// replace callback function
function find_replacements($match) {
global $allVars;
if (array_key_exists($match[0], $allVars))
return $allVars[$match[0]];
else
return $match[0];
}
輸出爲<p>test {$test} $test test</p>
,但我期待<p>test {ham} ham test</p>
我不會使用'$',因爲PHP已經將它用於插值,它可能導致令人討厭的錯誤。嘗試使用不同的字符,如'test {#test} #test test' – elclanrs
如果您使用'$',請嘗試將您的正則表達式放在單引號中。 – elclanrs
就是這樣 - 在我的正則表達式中使用單引號。你能寫一個答案來解釋爲什麼嗎? – Blazemonger