黑马程序员——正则表达式

来源:互联网 发布:哪些女装淘宝店铺推荐 编辑:程序博客网 时间:2024/06/03 03:31

------- android培训java培训、期待与您交流! ----------

1、概述:正则表达式:符合一定规则的表达式。
   作用:用于专门操作字符串。
   特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
   好处:可以简化对字符串的复杂操作。
   弊端:符号定义越多,正则越长,阅读性越差。

2、常用正则表达式的构造摘要:

字符类 
[abc] a、b 或 c(简单类) 
[^abc] 任何字符,除了 a、b 或 c(否定) 
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 
[a-z&&[def]] d、e 或 f(交集) 
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) 
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) 

注意:字符类包括数字、字母、各种特殊符号,遇到否定,别丢了字符。

预定义字符类 
. 任何字符(与行结束符可能匹配也可能不匹配) 
\d 数字:[0-9] 
\D 非数字: [^0-9] 
\s 空白字符:[ \t\n\x0B\f\r] 
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
这个里面包括'_',别丢了
\W 非单词字符:[^\w] 

注意:根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而 "\\b" 与单词边界匹配。字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)"。当切割字符'.'时表示regex="\\."

Greedy 数量词 
X? X,一次或一次也没有 
X* X,零次或多次 
X+ X,一次或多次 
以上三个可总结为:零次、一次、多次(包括一次)的任意两个组合。
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超过 m 次 

为了可以让规则的结果被重用,可以将规则封装成一个组。用()完成。组的出现都有编号。从1开始。 想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。例如"(.)\\1"表示叠词,1是组(.)的编号,多个重复字符"(.)\\1+"。
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 

1     ((A)(B(C))) 
2     \A 
3     (B(C)) 
4     (C) 

3、具体操作功能:

匹配:String  matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

切割:String split();

替换:String replaceAll(regex,str); 如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。$n表示第n个组。

获取:将字符串中的符合规则的子串取出。

获取操作步骤:
1、将正则表达式封装成对象。
2、让正则对象和要操作的字符串相关联。
3、关联后,获取正则匹配引擎。
4、通过引擎对符合规则的子串进行操作,比如取出。

0 0
原创粉丝点击