2015-12-20 34 views
1

所以我试图得到这个反向引用的工作,但我无法弄清楚我的生活。PHP preg_replace反向引用

目前我有这个字符串<% size_../files/file.rar %>,我需要与实际的文件大小来取代它。

这是我到目前为止。

$oldStr = "<% size_../files/file.rar %>"; 
$newStr = preg_replace("/<% size_(\w+) %>/", filesize("$1"), $oldStr); 

基本上我需要获取模式(\ w +)并将其用于via文件大小函数。

+3

您需要使用'preg_replace_callback()'+'\ w' - >'[\瓦特./]' – Rizier123

回答

1

\ w是唯一的[A-ZA-Z0-9 _]所以你需要处理其他字符,空格等,要么添加你需要的所有类型或可能匹配一切都交给“%>”。

可以使用的preg_replace,然后获取文件大小后或使用preg_replace_callback。

几个例子:

$oldStr = "<% size_../files/file with spaces.rar %>"; 

$size1 = preg_replace_callback("/<% size_([\w\.\/\s]+) %>/", 
    function ($matches) { 
     return filesize($matches[1]); 
    }, 
    $oldStr); 


$newStr = preg_replace("/<% size_(.+) %>/", "$1", $oldStr); 
if (is_file($newStr)) { 
    $size2 = filesize($newStr); 
} else { 
    //not a file 
}