一直都知道正则表达式的强大,但是总是觉得正则很难学不会,所以一直不得要领。这次因为工作原因,不得不用到正则,于是顺手将它学了起来。入门之后才发现,花费一点时间学习一下正则非常值得,可以成千上百倍地提升你的工作效率。特别是当你经常和批量数据以及规则文本打交道的时候,你会发现完全离不开正则。闲话到此为止,下面进入正题。

介绍

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语: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日 增加了比较简单&常用的使用方法