7

次のようなコンテンツが混在するディレクトリ内。

.afile
.anotherfile
bfile.file
bnotherfile.file
.afolder/
.anotherfolder/
bfolder/
bnotherfolder/

(dirsではなく)ファイル以外のすべてをどのようにキャッチし.ますか?
ネガティブな先読みで試しました^(?!\.).+?が、正しく機能していないようです。を使用し
て除外することにより、それを避けたいことに注意してください.[a-zA-Z< plus all other possible chars minus the dot >]

助言がありますか?

4

4 に答える 4

19

これはそれを行う必要があります:

^[^.].*$

[^abc]a、b、c以外のものと一致します

于 2010-05-25T22:18:24.530 に答える
2

あなたが持っている名前を始めることができる文字をエスケープ.して否定する:

^[^\.].*$

ここでテストケースを使用して正常にテストされました。

于 2010-05-25T22:21:36.213 に答える
1

ネガティブ先読み^(?!\.).+$は機能します。これはJavaです:

    String[] files = {
        ".afile",
        ".anotherfile",
        "bfile.file",
        "bnotherfile.file",
        ".afolder/",
        ".anotherfolder/",
        "bfolder/",
        "bnotherfolder/",
        "", 
    };
    for (String file : files) {
        System.out.printf("%-18s %6b%6b%n", file,
            file.matches("^(?!\\.).+$"),
            !file.startsWith(".")
        );
    }

出力は次のとおりです(ideone.comで見られるように):

.afile              false false
.anotherfile        false false
bfile.file           true  true
bnotherfile.file     true  true
.afolder/           false false
.anotherfolder/     false false
bfolder/             true  true
bnotherfolder/       true  true
                    false  true

非正規表現の使用にも注意してくださいString.startsWith。とにかく正規表現は必要ないので、おそらくこれが最良で最も読みやすいソリューションであり、正規表現(少なくともJavaでは)がどこにあるのかということstartsWithです。O(1)O(N)

空白の文字列の不一致に注意してください。これが可能な入力であり、これを返したい場合は、次のfalseように記述できます。

!file.isEmpty() && !file.startsWith(".")

も参照してください

于 2010-05-26T11:03:27.977 に答える
0

うーん...ネガティブなキャラクタークラスはどうですか?

[^.]

ドットを除外するには?

于 2010-05-25T22:18:27.833 に答える