01- 正则的基本元件
01- 正则的基本元件
![img](https://static001.geekbang.org/resource/image/54/1b/54a184548d369ca04ad4b69cd15dac1b.png)
#
\d # 代表数字的元字符
{11} # {} 中间的是量词 {11} 加在某个元字符后面 为 表示某字符出现的次数是11
\d{11}
元字符
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,元字符是构成正则表达式的基本元件。正则就是由一系列的元字符组成的。
![img](https://static001.geekbang.org/resource/image/97/bb/97f9aa05196ecba15a433e6e517093bb.png)
1、 特殊单字符
![img](https://static001.geekbang.org/resource/image/19/4b/199562249878c0967dde9f23c0b4904b.png)
2、空白符
除了特殊单字符外,你在处理文本的时候肯定还会遇到空格、换行等空白符。其实在写代码的时候也会经常用到,换行符 \n,TAB 制表符 \t 等。
有编程经验的程序员肯定都知道,不同的系统在每行文本结束位置默认的“换行”会有区别。比如在 Windows 里是 \r\n,在 Linux 和 MacOS 中是 \n。
![img](https://static001.geekbang.org/resource/image/01/66/01b6c8de6ee6c440471c15f96d00d466.png)
\s 能匹配上各种空白符号,也可以匹配上空格。换行有专门的表示方式,在正则中,空格就是用普通的字符英文的空格来表示。
3、量词
我们需要匹配单个字符,或者某个部分“重复 N 次”“至少出现一次”“最多出现三次”等等这样的字符,这个时候该怎么办呢?
![img](https://static001.geekbang.org/resource/image/2b/c3/2b03098dcc203c648a40f89a0ba77fc3.png)
4、范围
学习了量词,我们就可以用 \d{11} 去匹配所有手机号,但同时也要明白,这个范围比较大,有一些不是手机号的数字也会被匹配上,比如 11 个 0,那么我们就需要在一个特殊的范围里找符合要求的数字。
![img](https://static001.geekbang.org/resource/image/84/22/84625cc80a90dba2c629282e3f213622.png)
一些网站
正则网站or软件。
- https://regex101.com/ (老师用的)
- https://tool.oschina.net/regex/
- http://tool.chinaz.com/regex/
- https://www.w3cschool.cn/tools/index?name=re
- https://c.runoob.com/front-end/854
- http://tools.haokh.net/Regex
- Windows 上推荐:RegexBuddy
- Mac上推荐:Expressions
备注:1中支持账号功能,可以保存后进行分享。2~6都包含大量常用的正则示例。7&8 都需要付费。
一个练习
通过今天的学习,不知道你元字符掌握到何种程度了呢?那么不妨练习一下吧!我在这里给出一些手机号的组成规则:
第 1 位固定为数字 1;
第 2 位可能是 3,4,5,6,7,8,9;
第 3 位到第 11 位我们认为可能是 0-9 任意数字。
表达式:
1[3-9][0-9]{9}
#或者
1[3-9]\d{9}