正则表达式是前后端开发过程中经常接触到的,后端用的更多一些,之前做项目时碰到但不会匹配,今天学习总结一些规律。
常用元字符
\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这几个字母以外的任意字符 |