正则表达式
一 . 定义
正则表达式(regular expression)是一个字符串,用来描述匹配一个字符串集合的模式。
二.元字符
代码 | 匹配说明 |
. | 匹配除换行符以外的任意字符 |
\w | 匹配单词字符 |
\s | 匹配空白字符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
注:单词字符是任何的字母,数字或者下划线字符。
三.反义字符
语法 | 匹配说明 |
\W | 非单词字符 |
\S | 非空白字符 |
\D | 非数字字符 |
\B | 不是单词开头或结束的位置 |
[^X] | 除了x以外的任意字符 |
[^abc] | 除了a,b或者c以外的任意字符 |
四.量词符
语法 | 说明 | 举例 |
* | 重复零次或更多 次 | aaaa匹配”a*” |
+ | 重复一次或更多 次 | a匹配”a+b*” |
? | 重复零次或一次 | Java匹配”J?Java” |
{n} | 重复n次 | Java匹配”Ja{1}” |
{n,} | 重复n次或更多次 | aaaa匹配”a{1, }” |
{n,m} | 重复n到m次 | aaaa匹配”a{1,9}” |
注:1. *等同于{0,} +等同于{1,} ?等同于{0,1}
2.不要在重复量词符中使用空白。 A{3,6}不能写成A{3, 6}
3.任何字符串匹配正则表达式”.*”
五.转义字符
\
六.字符分枝
字符分枝多用于满足不同情况的选择,用“|”将不同的条件分割开来,比如有些固定电话区号有三位,有些有四位,这个时候可以采用字符分枝
例如:\d{3}-\d{8}|\d{4}-\d{8} 可以匹配两种不同长度区号的固定电话
七.字符分组
字符分组多用于将多个字符重复,主要通过使用小括号()来进行分组
形如:(\d\w){3} 重复匹配3次(\d\w)
例如,(ab){3}匹配ababab,但是ab{3}匹配abbb
八.常见正则表达式
正则表达式 | 匹配 | 示例 |
(ab|cd) | ab或者cd | ten匹配t(en|im) |
[abc] | a,b或者c | Java匹配 Ja[uvnm]a |
[a-z] | a到z | Java 匹配[A-M]av[a-k] |
[^a-z] | 除了a到z外的任意 字符 | Java匹配Jav[^b-d] |
[a-e[m-p]] | a到e或者m到p | Java 匹配[A- G[I-M]]av[a-d] |
[a-e&&[c-p]] | a到e与c到p的交集 | Java 匹配[A- P&&[I-M]]av[a-d] |
\p{p} | 一个标点字符 | J?a匹配”J\p{p}a” |
九.构建正则表达式
1.
社会安全号
2.
验证手机号码
3.
验证身份证号(18位)
4.
验证QQ号(从10000开始)
5.
验证邮箱
十.替换和拆分字符串
1.
replaceAll:替换和拆分所有的字符串
2.
replaceFirst:替换第一个匹配的字符串
3.
split(regex):使用匹配的分隔符将一个字符串拆分为子字符串
4.
split(regex,limit) limit参数确定匹配模式多少次
如果limit<=0,split(regex,limit)等同于split(regex)
十一.懒惰匹配和贪婪匹配
贪婪匹配:正则表达式中包含重复的限定符时,通常的行为是匹配尽可能多的字符。
懒惰匹配:匹配尽可能少的字符。
默认情况下,所有的量词符都是贪婪的。可以通过在后面添加问号来改变量词符的默认行为。
例如:第一个匹配成功的是aaa,第二个匹配成功的是a