正则表达式匹配基础

正则表达式匹配在线网站

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}

你可能感兴趣的:(正则表达式匹配基础)