Java中的RegEx Negative LookBehind

时间:2013-10-07 23:41:27

标签: java regex lookbehind negative-lookbehind

我正在尝试匹配以.xsd结尾但不在form.xsd中的字符串列表我使用以下regEx:

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测试器中尝试相同的表达式,我得到了预期的结果,但我没有在我的程序中得到结果。

1 个答案:

答案 0 :(得分: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);
    }
}