PHP preg_replace 反向引用

PHP preg_replace Backreferencing

所以我试图让这个反向引用起作用,但我一辈子都弄不明白。

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

这是我目前所拥有的。

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

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

\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_(.+) %>/", "", $oldStr);
if (is_file($newStr)) {
    $size2 = filesize($newStr);
} else {
    //not a file
}