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

介绍

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