一次搞定正则表达式
前言
在写这篇笔记之时,已经有很多与正则表达式有关的优秀博客了,我的学习也参考了不少优秀大佬的博客,甚至我觉得直接搬运他们写的博客还要好些,但自己动动手写一写的话可以学习理解的更加透彻,不仅要让自己看得懂,还得让自己写的来才行,所以在学习正则表达式时写下了这篇笔记。
概念
使用单个字符串
来描述、匹配一系列符合某个句法规则
的字符串
正则表达式的测试工具
- 推荐RegexBudd:
http://www.regexbuddy.com/
- RegExBuilder:
http://www.redfernplace.com/software-projects/regex-builder/
- 在线测试工具:
http://tool.chinaz.com/regex/
- 在线练习网站:
https://codejiaonang.com/#/course/regex_chapter1/0/0
一、基础字符
元字符
最基础的东西,相当于英文的26个字母
代码/语法 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字[A-Z] 、 [a-z] 、[0-9] 、_ |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束,其他类型的数据也能匹配 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
补充一点方便理解:
代码/语法 | 说明 |
---|---|
| | 条件分支或,指明两项或多项之间的一个选择 |
( ) | 多个匹配,将括号里面的内容作为一组 |
[ ] | 单个匹配,满足其中一个匹配即可 |
0\d{2}-\d{8}|0\d{3}-\d{7}
这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)
反义字符
与元字符相反的字符
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,S数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
限定字符
限定需要匹配的字符长度来达到重复匹配
代码/语法 | 说明 | 举例 |
---|---|---|
* | 重复零次或更多次 | zo* 能匹配 z |