4

私たちのシステムでは、フォルダとファイルの両方を正規表現形式にすることができます。例えば

/dir1*/abcd/efg.? is legal. 

/dir* could match /dira and also /dirb/cde

このパターンに一致するすべてのファイルを見つけたいです。不要な操作をなくすために、ルートディレクトリを取得してファイルの一覧表示とフィルタリングを開始したいと思います。

正規表現パスパターンのルートディレクトリを取得する効果的な方法はありますか?

いくつかのテストケース:

/abc/def*/bc return /abc
/abc/def*    return /abc
/ab.c/def*   return /
/ab\.c/def*  return /ab.c
4

2 に答える 2

3

編集:相対パスの処理を追加

String path;
String root = path.replaceAll( "((?<=/)|((?<=^)(?=\\w)))(?!(\\w|\\\\\\.)+/.*).*", "" ) );

テストは次のとおりです。

public static void main( String[] args ) throws IOException {
    String[] paths = {"/abc/def*/bc", "/abc/def*", "/ab.c/def*", "/ab\\.c/def*", "abc*", "abc/bc"};
    for ( String path : paths ) {
        System.out.println( path + " --> " + path.replaceAll( "((?<=/)|((?<=^)(?=\\w)))(?!(\\w|\\\\\\.)+/.*).*", "" ) );
    }
}

出力:

/abc/def*/bc --> /abc/
/abc/def* --> /abc/
/ab.c/def* --> /
/ab\.c/def* --> /ab\.c/
abc* --> 
abc/bc --> abc/

そこから微調整できます。

于 2012-07-19T06:50:29.540 に答える
0

この正規表現パターンを使用する

^/([a-zA-Z]+[a-bA-Z0-9]+)/?.$

これにより、最初の文字が文字であるという追加の条件を使用してルートパスが提供されます

それも数字である可能性がある場合は、単に使用することができます-

^/([a-bA-Z0-9]+)/?.$
于 2012-07-19T06:58:08.280 に答える