如何使用Regex提取部分路径和结束文件名?

时间:2012-12-05 22:39:42

标签: php regex

  

可能重复:
  How to extract a file extension in PHP?

我需要使用插件名称和它按以下顺序使用的语言文件构建一个关联数组:

/whatever/path/length/public_html/wp-content/plugins/adminimize/languages/adminimize-en_US.mo
/whatever/path/length/public_html/wp-content/plugins/audio-tube/lang/atp-en_US.mo
/whatever/path/length/public_html/wp-content/languages/en_US.mo
/whatever/path/length/public_html/wp-content/themes/twentyeleven/languages/en_US.mo 

这些是WordPress正在加载的语言文件 它们都位于/wp-content/内,但具有可变的服务器路径 我只关注插件文件夹中的那些,获取插件文件夹名称和文件名。

PHP中的Hipothetical案例,其中 reg_extract_* 函数是我缺少的部分:

$plugins = array();

foreach( $big_array as $item ) 
{
    $folder = reg_extract_folder( $item );
    if( 'plugin' == $folder ) 
    {
        // "folder-name-after-plugins-folder"
        $plugin_name = reg_extract_pname( $item ); 

        // "ending-mo-file.mo"
        $file_name = reg_extract_fname( $item ); 

        $plugins[] = array( 'name' => $plugin_name, 'file' => $file_name );
    }
}

[更新]

好的,所以我错过了一个基本的功能,pathinfo ...:/

检测数组中是否包含/plugins/没问题。

但插件文件夹名称怎么样?

2 个答案:

答案 0 :(得分:2)

此示例将获取文件夹中的所有文件,并显示有关文件路径的所有信息。

<?php

foreach(glob("/path/tofiles/*.*") as $file){
    $info = pathinfo($file);
    echo $info['dirname'], "\n";
    echo $info['basename'], "\n";
    echo $info['extension'], "\n";
    echo $info['filename'], "\n"; // since PHP 5.2.0
}

答案 1 :(得分:1)

$path = '/whatever/path/length/public_html/wp-content/plugins/adminimize/languages/adminimize-en_US.mo';
preg_match('/plugins\/([^\/]+?)\/(?:[^\/]+\/)?(.+)/', $path, $matches);
$dir = $matches[1];
$filename = $matches[2];

这会在$ dir中存储admin,在$ filename中存储adminimize-en_US.mo