所以这是我的字符串:
$tmpl = "...TABLE __? (`id` int(11...."
这是一个preg_replace:
$tmpl = preg_replace('/([^"\'0-9a-z_])__([a-z_]+[^"\'])/i', "\$1".$this->config->db_prefix2."\$2", $tmpl);
顺便说一下 $ this-> config-> db_prefix2 等于“ list _ ”
但是当代码执行时,preg_replace不执行任何操作(保留所有内容而不进行更改)。在我看来,问题出在preg_replace正则表达式中。这个想法是 替换__?列表_?
答案 0 :(得分:1)
我不确定为什么你这么复杂的模式就可以了呢
$tmpl = str_replace('__?', $this->config->db_prefix2, $tmpl);
或者如果你必须使用preg_replace
$tmpl = string_replace('/__\?/', $this->config->db_prefix2, $tmpl);
你可以在这里测试一下
https://regex101.com/r/pufIoY/1
也不要怪因为你把桌子名称排除了
$ tmpl =“... TABLE __?(
id
int(11 ....”
那就是说,如果我正在模仿这个,我会用这样的东西
CREATE TABLE {DbPrefix}.{Table} ( id int(11...."
然后使用,str_replace('{DbPrefix}', $prefix )
。主要是因为它比__?
更具可读性。但这是你的派对。