0

.xsd で終わるが form.xsd ではない文字列のリストと一致させようとしています。次の正規表現を使用します。

ArrayList<String> files = new ArrayList<String>();
files.add("/abadc/asdd/wieur/file1.form.xsd");
files.add("/abadc/asdd/wieur/file2.xsd");

Pattern pattern = Pattern.compile("(?<!form{0,6})\\.xsd$");
for (String file : files) {                                 
    Matcher matcher = pattern.matcher(file);
    if(matcher.find())                                                      
    {                                                                       
        System.out.println("Found >>>> "+file);    
    }                                                                                                                                         
}

file2 が印刷されることを期待していますが、結果が得られません。私はここで何か間違っていますか?オンラインの Java regEx Tester で同じ式を試してみると、期待どおりの結果が得られますが、プログラムで結果が得られません。

4

1 に答える 1

1

さて、あなたのコード例は私にとってはうまくいきます....しかし、「m」の後の{0,6}は意味がありません....なぜ0から6の「m」があるのでしょうか?

表現:

"(?<!form)\\.xsd$"

より理にかなっていますが、ループをmatches()メソッドを使用するように変更し、それに応じて正規表現を変更します:

Pattern pattern = Pattern.compile(".+(?<!form)\\.xsd");
for (String file : files) {                                 
    Matcher matcher = pattern.matcher(file);
    if(matcher.matches())                                                      
    {                                                                       
        System.out.println("Found >>>> "+file);
    }
}
于 2013-10-08T00:02:42.570 に答える