2015-12-20 37 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 
}