在一个简单的模板解析器中,$00
,$11
等位于HTML中,它将被删除。我没有看到我的模式中有什么因为更换而导致10美元被剥夺。
奇怪的是,除了处理标记的主preg_replace函数之外,我几乎已经注释掉了所有代码。似乎没有联系,但几乎所有其他东西都被删除了。
功能(未显示已注释的内容):
public function output() {
$output = file_get_contents($this->file);
foreach ($this->values as $key => $value) {
$dynamic = preg_quote($key);
$pattern = '%\[@'.$dynamic.'.*?\]%';
$output = preg_replace($pattern, $value, $output);
if ($key == 'objective') {
$objective = $value;
}
}
}
HTML摘录:
[if @objective]<div id="objective">[@objective]</div>[/if]
'客观'的原始价值(即$value
):
在XYZ公司获得一个职位,$ 100美元!100最大化我的管理技能,质量保证,项目开发和培训经验。
'目标'的新价值:
在XYZ公司获得一个职位,其中$ words 0!100最大化我的管理技能,质量保证,项目开发和培训经验。
答案 0 :(得分:2)
(对问题发表评论的后续行动。)
$xx
(其中x
是一个数字)用于preg_replace
的替换字符串中的反向引用。如果您希望替换字符串包含$xx
,则必须将其转义:
$value = preg_replace('/\\$\\d+/', '\\\\$0', $value);
这会将$xx
替换为\$xx
中的$value
。
答案 1 :(得分:1)
这种情况正在发生,因为在preg_replace
中,替换字符串中的$<number>
表示“替换为模式中的'th捕获括号”。
你必须告诉PHP忽略'$'符号。我认为你必须分两步完成这个过程:
str_replace("$","\\\$",$output);
- 通过预先加上反斜杠来保护美元符号preg_replace($pattern,$value,$output);