PHP preg_replace反向引用

时间:2015-12-20 08:40:23

标签: php regex preg-replace backreference

所以我试图让这个反向引用起作用,但我无法弄清楚我的生活。

目前我有这个字符串<% size_../files/file.rar %>,我需要用实际文件大小替换它。

这是我到目前为止所做的。

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

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

1 个答案:

答案 0 :(得分:1)

\ w仅为[A-Za-z0-9_],因此您需要处理其他字符,空格等。您可以添加所需的所有类型,也可以将所有类型都匹配到'%&gt;'。

您可以使用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
}