对应的内嵌标志表达式是 (?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"; 这个表达式的意思?
相关文章
- 很多人咨询的问题intel至强e5-2680和I5\i7、L5630X2有什么区别?
- 判断i能否被3和5整除的python表达式为_下列Python语句的运行结果是 x=True; y=False; z=True; if not x or y: print(1) elif not x ...
- iOS中的armv7,armv7s,arm64,i386,x86_64
- R语言中的I(x^2)
- i686和x86_64的区别
- x264 环路滤波原理系列:i_deblocking_filter_alphac0 和 i_deblocking_filter_beta 的应用
- f(x)=∑ i=0 n (a[i]×x i )的计算方法
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- X201i无线无法安装的原因_驱动安装顺序不对 - 冰危节奏
- 痞子衡嵌入式:降低刷新率是定位LCD花屏显示问题的第一大法(i.MXRT1170, 1280x480 LVDS)