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
}
所以我试图让这个反向引用起作用,但我一辈子都弄不明白。
目前我有这个字符串<% 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
}