Я пытаюсь сопоставить список строк, которые заканчиваются на .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 и получаю ожидаемый результат, но не получаю его в своей программе.
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);
}
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.