相关阅读
1. 正则表达式概述
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
1.1 给定一个正则表达式和另一个字符串,我们可以达到如下的目的
- 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
- 可以通过正则表达式,从字符串中获取我们想要的特定部分
1.2 正则表达式的特点是
- 灵活性、逻辑性和功能性非常的强;
- 可以迅速地用极简单的方式达到字符串的复杂控制。
- 对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容
2. 正则表达式基础知识
2.1 规则字符在java.util.regex Pattern类中
2.2 常见符号
2.2.1 字符
符号 | 说明 |
---|---|
X | 字符X |
\\ | 反斜线 |
\t | 制表符 (‘\u0009’) |
\n | 回车 |
\r | 换行 |
\f | 换页符 (‘\u000C’) |
\a | 报警 (bell) 符 (‘\u0007’) |
2.2.2 字符类
符号 | 说明 |
---|---|
[abc] | a、b或c |
[^abc] | 任何字符,除了a、b或c |
[a-zA-Z] | a到z,或A到Z |
[0-9] | 0到9的字符 |
[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](减去) |
2.2.3 预定义字符
符号 | 说明 |
---|---|
. | 任何字符 |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
2.3 边界匹配器
符号 | 说明 |
---|---|
^ | 行开头 |
$ | 行结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
2.3.1 Greedy数量词
符号 | 说明 |
---|---|
X? | 0次或1次 |
X* | 0次以上 |
X+ | 1次以上 |
X{n} | 恰好n次 |
X{n,} | 至少n次 |
X{n,m} | n-m次 |
2.3.2 组和捕获
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))中,存在四个这样的组:
- ((A)(B(C)))
- \A
- (B(C))
- (C)
组零始终代表整个表达式。在替换中常用$匹配组的内容。
3. 正则表达式的应用
3.1 判断功能
|
|
3.2 分割功能
|
|
3.3 替换功能
|
|
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
##3.4 获取功能
Pattern和Matcher类的使用
|
|
3.4 注意事项
Pattern类为正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式
4. 正则表达式的练习
4.1 判断功能:校验邮箱
|
|
4.2 分割功能
代码示例:我有如下一个字符串:”91 27 46 3850”,请写代码实现最终输出结果是:”27 3846 50 91”
|
|
4.3 替换功能:论坛中不能出现数字字符,用*替换
|
|
4.4 获取功能:获取由三个字符组成的单词
|
|
5. 正则表达式工具类
|
|
6. 常用正则表达式
校验数字的表达式
|
|
校验字符的表达式
|
|
特殊需求表达式
|
|