正则表达式匹配在线网站
C在线工具
站长工具
Regexpal
正则表达式是用 字符串字面值 来匹配 目标字符串。
字符串字面值 就是 看起来是什么就是什么。
匹配数字
[0-9] 匹配0到9范围内的任意数字
[012789] 匹配0、1、2、7、8、9这几个方括号内列出的数字
方括号[]是特殊的元字符,不参与匹配
方括号形式的正则表达式叫字符组或字符集
字符组简写式
\d 等价于 [0-9]
\d形式叫字符组简写式,也叫转义字符
\D表示匹配任何一个非数字字符
注意:
上面出现的字符组或字符组简写式都只匹配一个字符
匹配任意字符
英文句号.是通配符,可以匹配任意字符,但一般不匹配换行符
使用量词
- \d{3} 花括号中的数字表示数字出现的次数,花括号里面是数字的形式是一种量词,花括号在这里是元字符
- ?问号也是一种量词,\d?表示数字是可选的,可以不出现 或 出现一次
- +加号也是一种量词,\d+表示数字出现一次或多次
- *星号也是一种量词,\d*表示数字出现零次或一次或多次
捕获分组和后向引用
创建捕获分组通过圆括号()来实现,之后可以用\1对捕获内容进行后向引用
以匹配电话号码707-827-7019为例:
(\d)\d\1-\d\d\1-\1\d\d\d
可以对整个电话号码进行匹配
(\d)匹配第一个数字并捕获(数字7)
第二个\d匹配第二个数字0,没有用用圆括号,所以没有捕获数字0
\1对捕获的数字7进行反向引用
后面的分析类似
更简洁的正则表达式
以匹配电话号码707-827-7019为例:
(\d{3,4}-?)+
圆括号内是一个分组,分组的格式是3~4位数字后面带或者不带-连字符,这样的分组个数为一个或多个。所以这个正则表达式可以匹配这个电话。
但如果电话的格式必须是3个数字+连字符+3个数字+连字符+4个数字的形式,那上面这个表达式会匹配不是电话格式的字符串,比如707-827-这样的字符串。
改进一下:
(\d{3}-){2}\d{4}