初学正则表达式,对一堆乱码似的东西进行初步了解后,结合书本和大佬的文章归纳如下:
一、正则表达式(regex是一个字符串),用来描述匹配一个字符串集合的模式。可用于匹配、替换和拆分字符串。
二、基本元素
1.字符
| 字符 | 含义 | 举例 |
| . | 任意单个字符,除换行符外 | Java 匹配 J..a |
| [ ] | 匹配括号中任意一个字符 | [abc]d 匹配 ad 或者 bd 或者 cd |
| ^ | 位于 [ ] 的开头,匹配除了括号中字符外的任意字符 | Java 匹配 Ja[^ars]a |
| - | 在 [ ] 内表示字符范围 | [a-zA-Z0-9_] 表示任意数字、字母或下划线字符,即 单词字符 |
由以上可推一些正则表达式:
| 正则表达式 | 含义 | 举例 |
| [^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 与 m到p 的交集 | Java 匹配 [A-P&&[I-M]]av[a-d] |
2.量词符
| 字符 | 含义 | 举例 |
| * | p*:0次或多次 出现模式p | abab 匹配(ab)* [0-9][0-9]*匹配至少一位数字 |
| + | p+:1次或多次 出现模式p | a 匹配" a+b* " able 匹配” (ab)+.* " |
| ? | p?:0次或1次 出现模式p | Java 匹配" J?Java " ava 匹配" J?ava" |
| {n} | p{n}:正好出现 n次 模式p 注意不能使用空白 | Java 匹配" Ja{1}.* " Java 不匹配" .{2} " |
| {n,} | p{n,}:至少出现 n次 模式p 注意不能使用空白 | aaaa 匹配 " a{1,} " a 不匹配 " a{2,} " |
| {n,m} | p{n,m}:n到m(不包括)次出现模式p 注意不能使用空白 | abb 不匹配 " a{2,9}bb " |
注意:可以用括号来分组。例如 (ab){3} 匹配ababab,ab{3} 匹配abbb。
3.字符集
| 符号 | 含义 | 举例 |
| d | 一位数字,等同于[0-9] | Java2 匹配 " Java[\d] " |
| D | 一位非数字 | $Java 匹配 " [\D][\D]ava " |
| w | 单词字符 [a-zA-Z0-9_] | Java1 匹配 " [\w]ava[\d] " |
| W | 非单词字符 [^a-zA-Z0-9_] | $Java 匹配 " [\W][\w]ava " |
| s | 空白字符 | "Java 2" 匹配 "Java\s2" |
| S | 非空白字符 | Java 匹配 " [\S]ava " |
单词字符(w):任何字母、数字或下划线字符。
三、替换和拆分字符串
四、一些示例:
1. 偶数:[\d]*[02468] 例如:"123".matches("[\d]*[02468] ") returns false.
2. 电话号码(xxx)xxx-xxxx 第一位数字不能为0 :\([1-9][\d]{2}\)[\d]{3}-[\d]{4}
3. 标识符:*以字母、下划线或美元符号开始,不以数字开头。
*由字母、数字、下划线和美元符号组成。
[a-zA-Z_$][\w$]*
4.任意字符串:.*



