我有这个脚本来重命名我的文件
我希望它能在/之后和.rar
之前得到所有内容 /var/www/html/raw/File Name (J)(ProjectG).rar
这是我目前的代码:
preg_match("#/var/www/html/raw/(.*?).rar#i", $output, $matches);
但它只返回不在括号内的东西,我怎样才能得到所有东西。
Array ( [0] => /var/www/html/raw/File Name [1] => File Name )
由于
答案 0 :(得分:1)
这很容易,你不需要正则表达式。尝试这样做:
$file_path = '/var/www/html/raw/File Name (J)(ProjectG).rar';
$file_name = end(explode('/', $file_path));
var_dump($file_name);
或者,您也可以使用PHP内置函数basename():
var_dump(basename('/var/www/html/raw/File Name (J)(ProjectG).rar'));
两种方法输出:
如果您想在文件名解析后删除.rar
,请在其上使用str_replace
,例如:
$file_name = str_replace(
'.rar',
'',
basename('/var/www/html/raw/File Name (J)(ProjectG).rar'));
答案 1 :(得分:0)
不要使用正则表达式。正则表达式不是一个魔术棒,你会在每个涉及字符串的问题上挥手。
你不想要"在最后一次/"之后的所有事情。你想要文件名。 PHP中已经内置了从路径中提取文件名的函数。在这种情况下,您需要basename
。
$path = '/var/www/html/raw/File Name (J)(ProjectG).rar';
print basename( $path );
答案 2 :(得分:0)
退出分机中的句号。
"#/var/www/html/raw/(.*?)\.rar#i"
如果没有反斜杠,您将匹配rar
后跟的任何字符,这可能会也可能不会提前切断匹配,具体取决于文件名。 In this example它将以ends
中的Friends
结束。