0

次のようなパスを持つファイルのリストからファイル名を抽出しようとしています:

/a/b/c/d/file1.jpg
/e/f/g/h/file2.png
/i/j/k/l/file3.txt

「/」の間にある有効なファイル名(Linuxの場合)である文字列を取得したいのは、jpegファイル(「.jpg」で終わる)です。この例では、「file1」が唯一の有効な一致になります。

現時点で私はこの正規表現を持っています:

/(?<=\/)(.*?)(?=\.(js))/gim

これをRegExで行う方が良いのか、それともbasename()で行う方が良い/可能なのか、私にはよくわかりません。

私が達成したい目標は、一致するすべての文字列を配列に配置することです。私がこれを正しく行っているかどうかはわかりません。

4

1 に答える 1

1

ここでは正規表現は必要ありません。パスを配列に入れることができると仮定しました。

<?php
    $text = file_get_contents("list.txt");

    $foo = explode(PHP_EOL, $text);

    $bar = array(); 

        foreach($foo as $key => $value){
            if(pathinfo($value, PATHINFO_EXTENSION) == "jpg"){
                $bar[] = basename($foo[$key],".".pathinfo($value, PATHINFO_EXTENSION));
            }
        }

    print_r($bar);
?>

出力:

Array ( [0] => file1 )

実際の例: http://codepad.viper-7.com/ewkUHs

于 2012-04-28T00:36:34.110 に答える