一 . 定义
正则表达式(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} 可以匹配两种不同长度区号的固定电话
七.字符分组
字符分组多用于将多个字符重复,主要通过使用小括号()来进行分组
形如:(dw){3} 重复匹配3次(dw)
例如,(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匹配”Jp{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



