В javadoc Pattern
это определяется как:
(?idmsuxU-idmsuxU)
- Ничего, но ходы совпадают с флагами i d m s u x U вкл. - выкл.
(?idmsux-idmsux:X)
- X, как группа без захвата с заданными флагами i d m s и х вкл - выкл
Принимая во внимание, что (?i)
включает флаг CASE_INSENSITIVE
для оставшейся части шаблона регулярного выражения, (?i:X)
включает флаг только для X
.
например. это одинаковые 1 :
Foo(?i)Bar(?-i)Baz
Foo(?i:Bar)Baz
Также обратите внимание на следующий комментарий в javadoc:
В Perl встроенные флаги на верхнем уровне выражения влияют на все выражение. В этом классе встроенные флаги всегда вступают в силу в том месте, в котором они появляются, находятся ли они на верхнем уровне или внутри группы; в последнем случае флаги восстанавливаются в конце группы, как в Perl.
1) Это не означает, что (?i)X(?-i)
и (?i:X)
всегда одинаковы, см. Комментарии.
ОБНОВЛЕНИЕ - Доказательство:
System.out.println("Foo(?i)Bar(?-i)Baz Foo(?i:Bar)Baz");
for (String s : new String[] {"FooBarBaz","FoobarBaz","FooBARBaz","FoobARBaz","FOOBarBaz","FooBarBAZ"})
System.out.printf(" %-18s%-12s%s%n", s.matches("Foo(?i)Bar(?-i)Baz"), s.matches("Foo(?i:Bar)Baz"), s);
выход
Foo(?i)Bar(?-i)Baz Foo(?i:Bar)Baz
true true FooBarBaz
true true FoobarBaz
true true FooBARBaz
true true FoobARBaz
false false FOOBarBaz
false false FooBarBAZ