一些常用的正则匹配规则

正则表达式是前后端开发过程中经常接触到的,后端用的更多一些,之前做项目时碰到但不会匹配,今天学习总结一些规律。

常用元字符

  • \b: 正则中的特殊代码,元字符

代表着单词的开头或结尾,也就是单词的分界处,它只匹配一个位置
对于hi,him,history,high,我们需要精确查找hi这个单词,我们应该使用\bhi\b

  • .: 匹配除了换行符以外的任意字符

  • *: 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配

  • .*: 连在一起,表示任意数量的不包含换行的字符

例子:

hi后面不远处跟着一个Lucy

应该用\bhi\b.*\bLucy\b,表示先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词。

  • \d: 匹配一位数字(0,或1,或2,或……)

  • -: 不是元字符,只匹配它本身

  • \s: 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等

  • \w: 匹配字母或数字或下划线或汉字等

常用元字符汇总:

代码 说明
. 匹配除换行符以外的任意字符
* 匹配*前面的内容重复任意次,可能是0次
.* 匹配任意数量的不包含换行的字符
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\w 匹配字母或数字或下划线或汉字等
- 匹配它本身

字符转义

字符转义用在查找元字符本身,比如查找.或者*,为了不让它解释成别的意思,需要用\取消这些字符的特殊含义。应该使用\.或者\*.
对于要查找\本身,需要使用\\.

重复

代码 说明
* 匹配*前面的内容重复任意次(可能是0次)
+ 匹配+前面的内容重复1次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

字符类

[abcd]表示匹配abcd中的任一字符串,[.?!]匹配.或者?或者!中的一个符号。
练习:匹配几种格式的电话号码,(010)88886666,或022-22334455,或02912345678等。
答案是\(?0\d{2}[) -]?\d{8},首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)-空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

反义

有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:
常用的反义代码

代码 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符