во втором варианте не работает правильно?
Работает слишком широко, т.е. захватывает лишнее
Pattern pattern = Pattern.compile("(.*\\\\..*)(, ?\\1)*");
Не работает
Pattern pattern = Pattern.compile("([^,,^ ]+\\\\.[^,,^ ]{2,})(, ?\\1)*");
Работает, но хотелось бы починить второй вариант так как он короче
Pattern pattern = Pattern.compile("([^,,^ ]+\\\\.[^,,^ ]{2,})(, ?[^,,^ ]+\\\\.[^,,^ ]{2,})*");
А разве указание на группу не надо оборачивать в скобки?
пример текста для второй регулярки
public static void main(String[] args) { System.out.println("Позитивные"); // Pattern pattern = Pattern.compile("(.*\\\\..*)(, ?\\1)*"); // Pattern pattern = Pattern.compile("([^,,^ ]+\\\\.[^,,^ ]{2,})(, ?(\\1))*"); Pattern pattern = Pattern.compile("^([^,,^ ]+\\\\.[^,,^ ]{2,}.*)(, ?[^,,^ ]+\\\\.[^,,^ ]{2,}.*)*$"); System.out.println(pattern.matcher("a\\.ru").matches()); System.out.println(pattern.matcher("111a\\.ru").matches()); System.out.println(pattern.matcher("sdas\\.da").matches()); System.out.println(pattern.matcher("a1\\.ru,a2\\.ru").matches()); System.out.println(pattern.matcher("111a\\.rus, a\\.ruf\\323213123").matches()); System.out.println(pattern.matcher("11rerewrwerewr1a\\.ru, a\\.ru").matches()); System.out.println(pattern.matcher("dsdsaddsd\\.sad,dsads\\.ada").matches()); System.out.println(pattern.matcher("dsdsaddsd\\.sad, dsads\\.ada, sdas\\.da").matches()); System.out.println(pattern.matcher("^https://site\\.ru/page\\.php\\?token=[a-zA-Z0-9]+$").matches()); System.out.println("Негативные"); System.out.println(pattern.matcher("ss1.rr, ss2.rr").matches()); System.out.println(pattern.matcher("ss1\\.rr, ss2.rr").matches()); System.out.println(pattern.matcher(",a1\\.ru,a2\\.ru").matches()); System.out.println(pattern.matcher(" ,a1\\.ru,a2\\.ru").matches()); System.out.println(pattern.matcher("a1\\.ru, a2\\.ru,").matches()); System.out.println(pattern.matcher("a1\\.ru, a2\\.ru,,").matches()); System.out.println(pattern.matcher(",,,").matches()); System.out.println(pattern.matcher(", , , ").matches()); System.out.println(pattern.matcher(" , , , ").matches()); }
Обсуждают сегодня