捕获与非捕获捕获的话是指匹配到的内容在匹配的group[x]里保存,非捕获则是匹配到的内容在group[x]里不保存
忽略大小写来着~ 这里给段搜的资料,巨细的如果你想摸得透彻还是自己写几段代码试试吧 对应的内嵌标志表达式是 (?i),它有四种形式: 1,(?i) 2,(?-i) 3,(?i:X) 4,(?-i:X) 不带有 - 的是开标志,带有 - 的是关标志。 把上面的代码改成这样: Java code public class Test { public static void main(String[] args) { String str = "Book"; String regex = "(?i)book"; System.out.println(str.matches(regex)); } } 我们就达到了同样的效果,当然这样并不是最好的,因为字符串中只有 B 是大写的, 我们没有必要把所有的字符都进行不区分大小写匹配,我们可以在打开标志,用 (?i) 的 第二种形式马上关掉它: String regex = "(?i)b(?-i)ook"; 这样的话,只有 b 是区分大小写了,而 (?-i) 后面的还是得区分大小写匹配的。这样写 可能看上去很不顺眼,我们还能使用第 3 种形式直接指定某些字符是不区分大小写的。 String regex = "(?i:b)ook"; 这样的表达式与上面的那个在语义上是相同的。就效率上肯定是优于一下子开,一下子关的。 可见内嵌标志表达式要比指定编译参数的功能强大许多。 使用建议:如果能确定某些字符的大小写时,尽量使用已确定的字符,对于不确定的可以采用 (?i:X) 的方式指定。因此打开不区分大小写开关时,对匹配的性能是有一定影响的。 思考一下:String regex = "(?i)b(?-i:oo)k"; 这个表达式的意思?