Java 正则表达式 - 什么意思?i:是什么意思?

The*_*ger 3 java regex

我遇到了用 Java 代码编写的以下条件:

    String pattern = "(?i:U[A-Z0-9]C.*)";
    if (foo.matches(pattern))) {
    ...
Run Code Online (Sandbox Code Playgroud)

我不明白什么?i:意思。我见过(?i)用来表示不区分大小写的,但不确定这里的形式。

谢谢你的帮助!

And*_*eas 5

在 的 javadoc 中Pattern,它被定义为:

(?idmsuxU-idmsuxU)-没有,但匝数匹配标志 ð š ü X Ü开-关

(?idmsux-idmsux:X)- X,作为具有给定标志的非捕获组i d m s u x on - off

(?i)转弯的标志CASE_INSENSITIVE上的正则表达式模式的剩余部分,(?i:X)只ON标志X

例如,这些都是相同的1

Foo(?i)Bar(?-i)Baz
Foo(?i:Bar)Baz
Run Code Online (Sandbox Code Playgroud)

还要注意 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);
Run Code Online (Sandbox Code Playgroud)

输出

Foo(?i)Bar(?-i)Baz
Foo(?i:Bar)Baz
Run Code Online (Sandbox Code Playgroud)