Я пытаюсь сопоставить список строк, которые заканчиваются на .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 Tester и получаю ожидаемый результат, но не получаю его в своей программе.

0
Rush 8 Окт 2013 в 03:41

1 ответ

Лучший ответ

Что ж, ваш пример кода работает для меня .... но {0,6} после 'm' не имеет смысла ..... почему могут быть от 0 до 6 'm?

Выражение:

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

Было бы больше смысла, но тогда я бы также изменил ваш цикл, чтобы использовать метод match (), и соответственно изменить регулярное выражение:

Pattern pattern = Pattern.compile(".+(?<!form)\\.xsd");
for (String file : files) {                                 
    Matcher matcher = pattern.matcher(file);
    if(matcher.matches())                                                      
    {                                                                       
        System.out.println("Found >>>> "+file);
    }
}
1
rolfl 8 Окт 2013 в 04:02
Не могли бы вы объяснить мне, зачем мне. + При отрицательном просмотре назад. Я имею в виду, что я хочу найти только шаблон, в котором есть form.xsd, верно? . + теперь говорит, что somethingform.xsd - это не то, что мне нужно. С тех пор он также найдет abcdform.xsd, но я хочу найти только abcd.form.xsd. Есть ли случай, когда мое регулярное выражение не сработает. Спасибо за ответ.
 – 
Rush
9 Окт 2013 в 03:11