【问题标题】:preg_replace is modifying JavaScriptpreg_replace 正在修改 JavaScript
【发布时间】:2013-10-05 01:18:32
【问题描述】:

我有一个模板工具,它替换占位符,其中一个工具加载其他文件,这是我用于调试的:

var_dump($string);
$tmp = preg_replace('/\\$import\(("|\')' . $f . '("|\')\).*;/i', $string, $tmp);
var_dump($tmp);

第一个var_dump打印出一个文件的内容,文件中有这行JavaScript:

$("#image-menu .info").html(text.replace(/(.+?:)/, "<b>$1</b>"));

pre_replace 之后我有第二个var_dump 然后打印出这个:

$("#image-menu .info").html(text.replace(/(.+?:)/, "<b>"</b>"));

如您所见,$1" 取代,我不知道为什么。关于它为什么被替换的任何想法?

这里是完整的方法:

private function loadIncludes(){
    $tmp     = $this->template;
    $matches = array();
    preg_match_all('/(\\$import\(("|\')(.+?)("|\')\).*;)/i', $tmp, $matches);
    $files   = $matches[3];
    $replace = 0;
    foreach($files as $key => $file){
        $command = preg_replace("/\\\$import\((\"|').+?(\"|')\)/", "", $matches[0][$key]);
        $string  = $this->import($file);
        $string  = $this->runFunctions($string, "blah" . $command);
        $f       = preg_quote($file, "/");
        var_dump($string);
        $tmp     = preg_replace('/\\$import\(("|\')' . $f . '("|\')\).*;/i', $string, $tmp);
        var_dump($tmp);
        $replace++;
    }
    $this->template = $tmp;
    if($replace > 0){
        $this->loadIncludes();
    }
}

【问题讨论】:

  • 你为什么要使用正则表达式来修改你的代码?
  • 它不应该修改代码,它只是应该将文件作为字符串加载并将其附加到当前字符串。
  • 你必须避开$ 符号。
  • @djot 谢谢!这解决了我的问题!

标签: php regex


【解决方案1】:

在单引号内不能使用\r\n 等控制字符,这意味着您不必对$ 进行双重转义。您的\\$ 可以简单地为\$

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多