PHP preg_替换反向引用

PHP preg_替换反向引用,php,regex,preg-replace,backreference,Php,Regex,Preg Replace,Backreference,所以我试着让这些背景资料发挥作用,但我一辈子都搞不清楚 目前我有这个字符串,我需要用实际文件大小替换它 这就是我目前所拥有的 $oldStr = "<% size_../files/file.rar %>"; $newStr = preg_replace("/<% size_(\w+) %>/", filesize("$1"), $oldStr); $oldStr=”“; $newStr=preg_replace(“/”,文件大小(“$1”),$oldStr); 基本

所以我试着让这些背景资料发挥作用,但我一辈子都搞不清楚

目前我有这个字符串
,我需要用实际文件大小替换它

这就是我目前所拥有的

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

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

\w只是[A-Za-z0-9],因此您需要处理其他字符、空格等。可以添加所有需要的类型,也可以将所有类型匹配到“%”

您可以使用preg_replace,然后获取文件大小,或者使用preg_replace_回调

举几个例子:

$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
}
$oldStr=”“;
$size1=preg\u replace\u回调(“/”,
函数($matches){
返回文件大小($matches[1]);
}, 
$oldStr);
$newStr=preg_replace(“//”、“$1”、$oldStr);
if(is_文件($newStr)){
$size2=文件大小($newStr);
}否则{
//不是档案
}

您需要使用
preg\u replace\u callback()
+
\w
->
[\w./]