第一章 什么是正则表达式
什么是正则表达式
正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串。
1.1 从regexpal开始
- 网站
http://www.regexpal.com/
1.2 匹配北美电话号码
创建文本 resample 内容如下
707-827-7019
1.3 用字符数组来匹配数字
- 匹配0到9的任意数字
[0-9]
- 正则表达式将方括号视为特殊的元字符,因此方括号不参与匹配。
- 元字符是在正则表达式中含有特殊含义的字符,也是保留字符。
我们可以使用 grep 来验证表达式
执行
grep --color '[0-9]' resample
结果如下
表示匹配0-9的任意数字
[0 1 2 7 8 9]
执行命令:
grep --color '[0 1 2 7 8 9]' resample
结果如下
表示匹配方括号[ ]中的所有数字
1.4 使用字符组简写式
- \d 和[0-9]一样匹配任意阿拉伯数字
\d\d\d-\d\d\d-\d\d\d\d
执行命令:
grep --color '\d\d\d-\d\d\d-\d\d\d\d' resample
结果如下
- \D 匹配任意一个非数字字符。
\d\d\d\D\d\d\d\D\d\d\d\d
执行命令:
grep --color '\d\d\d\D\d\d\d\D\d\d\d\d' resample
结果如下:
这里\D 匹配了 -
1.5 匹配任意字符
\d\d\d.\d\d\d.\d\d\d\d
- . 点号(英文句号)是一个通配符,可以匹配任意字符。但是一般不匹配起始行符
执行命令:
grep --color '\d\d\d.\d\d\d.\d\d\d\d' resample
结果如下:
这里 . 匹配了 -
1.6 捕获分组和向后引用
(\d)0\1\D\d\d\1\D\1\d\d\d
- (\d)匹配第一个数字并将其捕获
- \d匹配第二个数字但没有捕获,因为没有括号
- \1 对数字进行反向引用
1.7 使用量词
\d{3}-?\d{3}-?\d{4}
- 花括号中的数字表示待查找的数字出现的次数。包含数字的花括号是一种量词。花括号本身是一种元字符。
- 问号是另一种量词,在上面表示连接符号是可选的。
- 加号(+)表示“一个或者多个”,星号(*)表示“零个或者多个”
(\d{3}[.-]?){2}\d{4}