1、正则表达式介绍
用来处理复杂的字符串文本,例如查找、匹配、分割、替换等。大部分语言都有内置的支持,例如:Java、C++。
我会使用工具RegexBuddy进行演示
2、普通字符
在正则表达式中,字母、数字、下划线、以及没有特殊定义的标点符号都是普通字符。正则表达式中的普通字符在匹配的时候会匹配一个与之相等的一个字符。
上图中,上面的正则表达式 hello 就匹配到了对应下面字符串文本的 hello world 中的hello。这里正则表达式里面的hello都是普通字符。
3、简单转义字符
\n 换行符
\t 制表符
\\ 代表 \本身
\^ \$ \. \( \) \{ \} \? \+ \* \| \[ \] 代表这些字符本身
因为这些字符具有特殊的含义,所以需要进行转义。
3、标准字符集合
\d 表示0-9的任意一个数字
\w 表示字母、数字、下划线的任意一个
\s 表示一个空白字符,例如 空格 制表符 换行符
. 表示任意一个字符
注意:区分大小写! 大写表示取反,例如 \D 表示非数字 \S表示非空白字符
4、自定义字符集合
自定义字符集合使用中挎号[]包起来,例如 [12@] 表示匹配一个字符,这个字符是 1 或者 2 或者 @。
^ 表示取反 例如 [^12@] 表示除了1 2 @ 之外的任何字符
- 表示范围 例如 [7-9] 表示 数字 7 8 9,那么[^7-9a-c]就表示除7 8 9 a b c 之外的字符
注意:
1、如果要匹配 ^ 和 - 本身,则需要带上 转义\
2、其他的特殊字符被包含在[]种中时失去了特殊意义
5、量词
用来修饰匹配次数
{n} 表达式重复n次
{n,m} 表达式至少重复n次,至多重复m次
{n,} 表达式至少重复n次
? 表达式重复0次或1次,相当于{0,1}
+ 表达式重复1次或多次,相当于{1,}
* 表达式重复0次或多次,相当于{0,}
默认是贪婪模式,即匹配的字符越多越好
在量词后面加上?表示非贪婪模式,即匹配的字符越少越好
注意:可以用()把表达式合并起来
6、边界匹配
^ 表示匹配字符串开始的地方
$ 表示匹配字符串结束的地方
7、预搜索(零宽断言)
(?=exp) 断言表达式的后面能匹配exp
(?<=exp) 断言表达式的前面能匹配exp
(?!=exp) 断言表达式的后面不能匹配exp
(?<!exp) 断言表达式的前面不能匹配exp
注意exp本身不会被匹配
这个例子有点难度,他表示匹配字符串wtf并且wtf后面紧跟3个数字,并且数字后面不是数字。
其中()的作用是把表达式合并为一个整体。
8、选择符和分组
| 表示或的关系 例如 [a-z]|[0-9] 表示匹配左边或者右边均可,也可简单表示为[a-z0-9]
()除了可以把表达式合并为一个整体之外还可以捕获组,就是把前面()内匹配的东西拿出来作为表达式再进行匹配
对于分组的内容可以使用 \n 获取出来,其中n表示分组编号
例如:这是找出具有aabb结构的字符串。
9、正则表达式在Java中的使用
还有像String的split、replace、等方法都可以使用。