一直都知道正则表达式的强大,但是总是觉得正则很难学不会,所以一直不得要领。这次因为工作原因,不得不用到正则,于是顺手将它学了起来。入门之后才发现,花费一点时间学习一下正则非常值得,可以成千上百倍地提升你的工作效率。特别是当你经常和批量数据以及规则文本打交道的时候,你会发现完全离不开正则。闲话到此为止,下面进入正题。
介绍
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
来自维基百科
语法
元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
字符转义
如果需要使用元字符本身,你需要使用\
来取消转义.
\\
匹配\
C:\\Windows
匹配C:\Windows
重复
代码 | 说明 |
---|
- | 重复零次或更多次
- | 重复一次或更多次 ? |重复零次或一次 {n} |重复n次 {n,} | 重复n次或更多次 {n,m} | 重复n到m次
Windows\d+
匹配Windows后面跟1个或更多数字^\w+
匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)
字符类
除了使用元字符意外,我们也可以指定一个字符范围,作为一个字符类:
- 像[0-9]代表的含意与\d就是完全一致的:一位数字
- [a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)
- [abc]表示只匹配abc三个字母中的一个
逻辑判断
我们可以使用|
来将不同的规则分开
匹配分支条件时会从左往右进行匹配,只要满足了某个分支,就不会再考虑之后的。
\d{5}-\d{4}|\d{5}
表示匹配12345-1234
或者12345
\d{5}|\d{5}-\d{4}
但如果这样写,12345-1234
就只会匹配前面的12345
分组
前面讲到了单个字符的重复,如果有多个字符需要重复的话,我们就需要分组——使用(
和)
。
- (\d{1,3}.){3}\d{1,3} 表示匹配长得像IP地址的数字串
\d{1,3}\.
表示一到三位的数字再加上一个点,分组之后再重复三次,然后再加上一个一到三位的数字
反义
代码 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
\S+
匹配不包含空白符的字符串。<a[^>]+>
匹配用尖括号括起来的以a开头的字符串。
参考资源
更新日志
- 2015年10月29日 增加了比较简单&常用的使用方法