正则表达式
简介
正则表达式时一种强大而灵活的文本处理工具,用于文本的复杂处理
正则表达式就是描述了一个规则,通过这个规则可以匹配一类字符串
语法
普通字符
字母,数字,汉字,下划线以及没有特殊定义的标点符号都是普通字符。表达式中的普通字符在匹配一个字符串时,匹配与之相同的一个字符简单的转义字符
1
2
3
4
5
6
7\n 代表换行符
\t 代表制表符
\\ 代表\本身
还有一些特殊的字符表达标准字符集合
1
2
3
4
5
6
7
8\d 任意一个数字
\w 任意一个字母,数字或下划线
\s 包括空格,制表符,换行符等空白字符的其中任意一个
. 小数点可以匹配任意一个字符(除了换行符)
注意大小写,若是大写则代表相反的意思,比如 \D 表示除了数字之外的字符自定义字符集合
方括号的匹配方式,能够匹配方括号中任意一个字符,比如
1
2
3[123] 匹配1,2,3字符
[2-8] 匹配2~8的数字
[ ^123 ] 匹配除了1,2,3之外的字符正则表达式的特殊符号被包含到中括号中则失去特殊意义,除了^,-之外
标准字符集合,除小数点外,如果被包含于中括号,自定义字符集合将包括该集合,比如
1
[\d.\-+] 匹配数字,小数点,+,-
量词
1
2
3
4{n} 重复n次
{m,n} 至少重复m次,最多重复n次
匹配的时候默认的是贪婪模式,意思为能匹配多的就匹配多的
非贪婪模式,匹配字符越少越好,修饰匹配次数的特殊符号后加一个“?”字符边界
1
2
3
4
5把一整个文本当成一个字符串
^ 与字符串开始的地方匹配
$ 与字符串结束的地方匹配
\b 匹配一个单词边界,即前面和后面的字符不全是\w
选择符和分组
1
2
3
4| 或,表示匹配左边或右边
( ) 捕获组,可以保存捕获的内容,并从1开始编号
(?: ) 非捕获组,表示不需要保存捕获的内容
反向引用 每一对()会分配一个编号,使用()根据左括号开始从1编号,通过反向引用可以对分组已捕获的字符串进行引用,比如\1会表示第一个捕获组的内容预搜索(零宽断言)
1
2
3
4
5零宽断言表示一种零宽度的匹配,匹配的是一个位置
(?=exp) 断言自身出现的位置后面有表达式exp
(?!exp) 断言此位置的后面不能有表达式exp
(?<=exp) 断言自身出现的位置前面有表达式exp
(?<!exp) 断言此位置的前面不能有表达式exp
匹配模式
IGNORECASE
忽略大小写模式,即匹配时忽略大小写
SINGLELINE
单行模式,整个文本看作一个字符串
MULTILINE
每行都是一个字符串,如果需要匹配最开始和结束的位置,可以用\A和\Z
Java中使用正则表达式
在Java中使用正则主要是java.util.regex包地Pattern和Matcher类
类Pattern
- 正则表达式的编译表示形式
类Matcher
通过解释Pattern对character sequence执行匹配操作的引擎
-
1
Matcher m = p.matcher(str) ; //匹配str字符串
一个简单地使用
1 | // 一个简单的使用 |
评论