初学正则表达式,对一堆乱码似的东西进行初步了解后,结合书本和大佬的文章归纳如下:
一、正则表达式(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.任意字符串:.*