正则表达式中的字符集等概念

* 字符集:

使用中括号括住字符串来创建字符集(character set),可以匹配它包括的任意字符串。

eg: ’[a-zA-Z0-9]‘ 能匹配任意大小写字母和数字。

eg: '[^abc]'可以匹配除了a、b和c之外的字符


* 子模式:

使用圆括号括起需要的部分,或称子模式(subparttern)

eg: 'p(ython|erl)'可以匹配'python'或'perl'


* 可选项和重复子模式:

在子模式后面加上问号,它就变成了可选项。

下面这些运算符允许子模式重复多次:

(pattern)* : 允许模式重复0次或多次;

(pattern)+ : 允许模式重复1次或n次;

(pattern){m,n} : 允许模式重复m~n次。


* 贪婪模式和勉强模式:

>>Greedy(贪婪模式): 数量表示符默认采用贪婪模式,除非另有表示。贪婪模式的表达式会一直匹配下去,直到无法匹配为止。

如果你发现表达式匹配的结果与预期的不符,很有可能是因为——你以为表达式只会匹配前面几个字符,而实际上它是贪婪

模式,所以会一直匹配下去。

>>Relucant(勉强模式): 用问号后缀(?)表示,它只会匹配最少的字符。也称为最小匹配模式。

表1 两种模式的数量表示符
贪婪模式 勉强模式 说明
 X?  X??   X表达式出现零次或一次
 X*  X*?  X表达式出现零次或多次
 X+  X+?  X表达式出现一次或多次
 X{n}  X{n}?  X表达式出现n次
 X{n,}  X{n,}?  X表达式最少出现n次
 X{n,m}  X{n,m}?  X表达式最少出现n次,最多出现m次

关于贪婪模式和勉强模式的对比,看如下代码:

String str = "hello , java!";

System.out.println(str.replaceFirst("\\w*", "#"));  //输出 # , java!

//使用勉强模式,数量表示符(*)会尽量匹配最少字符,即匹配0个字符。

System.out.println(str.replaceFirst("\\w*?", "#"));  //输出 #hello  , java!     




你可能感兴趣的:(字符处理)