正则表达式入门

什么是正则表达式?

正则表达式(Regular Expression),“Regular”意为“规则”、“规律”,Regular Expression 即“描述某种文本规则的表达式”。下文简称为“正则”。


正则的用途

既然正则描述了某种文本规则,那么我们就可以判断某文本是否符合某正则的规则,或者是利用某正则来找出符合其规则的文本。

举些例子:

  • 判断字符串 abcde 里是否包含字符 c
  • 判断字符串 abcde-123 里是否包含数字
  • 找出字符串 abcdeabcde-123 的哪个字符串包含字符 -

如何使用正则?

正则有很多语法,我们由浅到深逐个学习吧,这个网站可以在线测试正则。

字符串匹配

c           匹配字符 'c'
abc         匹配字符串 "abc"

转义字符

\r          匹配回车
\n          匹配换行符
\t          匹配制表符
\\          匹配 \ 本身
\^          匹配 ^ 本身
\$          匹配 $ 本身
\.          匹配 . 本身

多种字符

\d          匹配任意一个数字,即 0~9 中任意一个
\w          匹配任意一个字母或数字或下划线,也就是 A~Z, a~z, 0~9, _ 中任意一个
\s          匹配包括空格、制表符、换页符等空白字符中任意一个
.           匹配除了换行符(\n)以外的任意一个字符

使用方括号 [ ] 包含一系列字符,匹配 [ ] 里的任意一个字符,如:

[ab5@]      匹配 "a" 或 "b" 或 "5" 或 "@"
[^abc]      匹配除 "a","b","c" 以外的任意一个字符
[f-k]       匹配 "f"~"k" 之间的任意一个字母
[^A-F0-3]   匹配 "A"~"F","0"~"3" 以外的任意一个字符

多次匹配

{n}         表达式重复 n 次,如 "\w{2}" 相当于 "\w\w"
{m,n}       表达式至少重复 m 次,最多重复 n 次,如 "ba{1,3}" 可以匹配 "ba" 或 "baa" 或 "baaa"
{m,}        表达式至少重复 m 次,如 "\w\d{2,}" 可以匹配 "a12","_456","M12344"...
?           表达式出现 0 或 1次,相当于 {0,1},如 "a[cd]?"可以匹配 "a","ac","ad"
+           表达式至少出现 1 次,相当于 {1,},如 "a+b" 可以匹配 "ab","aab","aaab"...
*           表达式不出现或出现任意次,相当于 {0,},比如:"\^*b"可以匹配 "b","^^^b"...

特殊符号

^           与字符串开始的地方匹配,不匹配任何字符
$           与字符串结束的地方匹配,不匹配任何字符
\b          匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符
|           匹配 | 左右两个表达式

举例1:表达式 ^aaa 在匹配 xxx aaa xxx 时,匹配失败。因为 ^ 要求与字符串开始的地方匹配,因此,只有当 aaa 位于字符串的开头的时候,^aaa 才能匹配,如 aaa xxx xxx

举例2:表达式 aaa$ 在匹配 xxx aaa xxx 时,匹配失败。因为 $ 要求与字符串结束的地方匹配,因此,只有当 aaa 位于字符串的结尾的时候,aaa$ 才能匹配,如 xxx xxx aaa

举例3:表达式 .\b. 在匹配 @@@abc 时,匹配成功,匹配到的内容是 @a。进一步说明:\b^$ 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 \w 范围,另一边是 非\w 的范围。

举例4:表达式 \bend\b 在匹配 weekend,endfor,end 时,匹配成功,匹配到的内容是 end

举例5:表达式 Tom|Jack 在匹配 I'm Tom, he is Jack 时,匹配成功,匹配到的内容是 Tom。匹配下一个时,匹配成功,匹配到的内容是 Jack

其它语法

其它更多的语法,可阅读下面的参考资料。


参考资料