RegEx

2020-03-19

匹配单字符

1
sk.  : skz

匹配字符串

1
2
sk[0-9]  :  sk4
sk[^a-d] : ske

匹配空白字符

1
\f 换页  \n  换行   \r  回车   \t  制表符   \v  垂直制表

匹配特定字符

1
2
3
4
5
6
\d  <=>  [0-9]
\D <=> [^0-9]
\w <=> [a-zA-Z0-9_]
\W <=> \w 取非
\s <=> [\f\n\r\t\v]
\S <=> \s 取非

匹配重复字符

1
2
3
4
5
6
7
8
9
10
11
12
13
+  	匹配1或多个字符
* 匹配0或多个字符
? 匹配0或1个字符

邮箱匹配 [\w.]+@\w+\.\w+
[\w.] 匹配的是字母数字或者 . ,在其后面加上 + ,表示匹配多次。在字符集合 [ ] 里,. 不是元字符 abc.def@qq.com
------------------------------------------------------------------
{n} 匹配 n 个字符
{m,n} 匹配 m~n 个字符
{m,} 至少匹配 m 个字符

a.+c 由于 + 是贪婪型的,因此 .+ 会匹配更可能多的内容,所以会把整个 abcabcabc 文本都匹配,而不是只匹配前面的 abc 文本。用懒惰型可以实现匹配前面的。
abcabcabc

匹配位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
单词边界
\b 可以匹配一个单词的边界,边界是指位于 \w 和 \W 之间的位置;\B 匹配一个不是单词边界的位置。
\b 只匹配位置,不匹配字符,因此 \babc\b 匹配出来的结果为 3 个字符。
字符串边界
^ 匹配整个字符串的开头,$ 匹配结尾。
^ 元字符在字符集合中用作求非,在字符集合外用作匹配字符串的开头。
分行匹配模式(multiline)下,换行被当做字符串的边界。
---------------------------------------------------------------------
^\s*\/\/.*$ 匹配 // 开头的行
public void fun() {
// 注释 1
int a = 1;
int b = 2;
// 注释 2
int c = a + b;
}

子表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
() : 作为一个整体
| : 或
$ : 引用() $1 - $99
----------------------------------------------------------------------
(ab){3,}
abababab

(19|20)\d{2}
1900 ✅
200
1801

((25[0-5]|(2[0-4]\d)|(1\d{2})|([1-9]\d)|(\d))\.){3}(25[0-5]|(2[0-4]\d)|(1\d{2})|([1-9]\d)|(\d))
192.168.0.1 ✅
00.00.00.00
555.555.555.555

(\d{3})(-)(\d{3})(-)(\d{4})
313-555-1234 ✅
($1) $3-$5
(313) 555-1234