------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
正则表达式
一、概述
定义:符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
二、构造摘要
仅仅列举一些常用的功能,具体的详见API。
字符 | |
x | 字符 x |
\\ | 反斜线字符 |
\0n | 带有八进制值 0 的字符 n (0 <= n <= 7) |
\0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) |
\0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |
\xhh | 带有十六进制值 0x 的字符 hh |
\uhhhh | 带有十六进制值 0x 的字符 hhhh |
\t | 制表符 ('\u0009') |
\n | 新行(换行)符 ('\u000A') |
\r | 回车符 ('\u000D') |
\f | 换页符 ('\u000C') |
\a | 报警 (bell) 符 ('\u0007') |
\e | 转义符 ('\u001B') |
\cx | 对应于 x 的控制符 |
字符类 | |
[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] |
边界匹配器 | |
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
Greedy 数量词 | |
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
Reluctant 数量词 | |
X?? | X,一次或一次也没有 |
X*? | X,零次或多次 |
X+? | X,一次或多次 |
X{n}? | X,恰好 n 次 |
X{n,}? | X,至少 n 次 |
X{n,m}? | X,至少 n 次,但是不超过 m 次 |
Possessive 数量词 | |
X?+ | X,一次或一次也没有 |
X*+ | X,零次或多次 |
X++ | X,一次或多次 |
X{n}+ | X,恰好 n 次 |
X{n,}+ | X,至少 n 次 |
X{n,m}+ | X,至少 n 次,但是不超过 m 次 |
注意:
1、每个字符前边都需要加一个字符\;字符 .的写法为\\.;两个\字符的写法为\\\\。
2、组的概念:需要再次用到上一次的符号规则时用括号()括起来即可,即为封装成组;若出现叠词时规则为(.)\\1,叠词出现多次时规则为(.)\\1+;
组的应用:1、使字符串按照叠词完成切割。为了可以让规则的结果被重用。
2、调用组的时候用符号$,后面在跟一个组号,如$2表示调用前面二号组。
3、可以将规则封装成一个组。用()完成。组的出现都有编号。
组数从1开始。 想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。
3、((())())这个有几组,确定组数的时候就看左括号(有几个左括号就有几组),从左往右一次是第一组,第二组……
三、常用方法
1,匹配
Boolean matches(String regex)方法。用规则匹配整个字符串,符合则返回true,只要有一处不符合规则,就匹配结束,返回false。
其实String类中的matches和replaceAll方法。用的就是Pattern和Matcher对象来完成的。只不过被String的方法封装后,用起来较为简单。功能也单一。
匹配小练习:
运行结果 :
2,切割
String[] split(String regex,int limit)
切割小练习:
运行结果:
3,替换
String replaceAll(String regex,String replacement) 如果regex中有定义组,可以在第二参数中通过$n(n为组数)符号获取正则表达式中的已有的组。
替换小练习:
运行结果:
4,获取
将字符串中的符合规则的子串取出。
4.1、Pattern属于java.util.regex包
用到的Pattern中的方法:
1、static Patterncompile(String regex) 将给定的正则表达式编译到模式中。
2、Matchermatcher(CharSequence input) 创建匹配给定输入与此模式的匹配器,返回类型是:匹配器操作的引擎
4.2、用到的matcher中的方法
1、Stringgroup(); 获取符合规则的字符串序列。
2、boolean find();判读是否有符合规则的字符序列。有则返回true,否则返回false。
3、int end(); 获取符合规则子串停止位置的角标。即:指针结束的位置
4、int start();获取符合规则子串开始位置的角标。即:指针开始的位置
4.3、获取子串操作步骤
1,将正则表达式封装成对象。
2,让正则对象和要操作的字符串相关联。
3,关联后,获取正则匹配引擎。
4,通过引擎对符合规则的子串进行操作,比如取出。
获取子串小练习:
运行结果:
5、4种方法的使用情况分析
1,如果只想知道该字符是否对错,使用匹配。
2,想要将已有的字符串变成另一个字符串,替换。
3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。
4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
正则表达式小练习:
练习1:
运行结果为 :
练习2:
运行结果为:
练习3:网页爬虫(蜘蛛)
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------