正则表达式包括括号

时间:2014-05-21 13:03:28

标签: php regex

我有这个脚本来重命名我的文件

我希望它能在/之后和.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 )

由于

3 个答案:

答案 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'));

两种方法输出:

enter image description here


如果您想在文件名解析后删除.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结束。