2015-12-20 2 views
1

Итак, я попытался получить эти обратные ссылки для работы, но я не могу понять это для жизни меня.PHP preg_replace Backreferencing

В настоящее время у меня есть эта строка <% size_../files/file.rar %>, и мне нужно заменить ее фактическим размером файла.

Это то, что у меня есть до сих пор.

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

В принципе, мне нужно получить шаблон (\ w +) и использовать его для функции filesize.

+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 
}