# 前言

先说点别的。一般来说,听到一个计算机科学的名词的中文,可能猜不到这是什么,但是听到英文就很好理解了。

正则表达式(regular expression)这个概念,是少数的,我听了英文以后还猜不知道是什么的概念之一。

正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

linux 中支持用正则表达式检索文本的有 sedgrep,Python 中有 re 模块,JavaScript 中有 RegExp 对象和 String.match() 等方法。

# 教程:正则表达式30分钟入门教程

转载:正则表达式30分钟入门教程 (opens new window) wegester, 在线正则表达式测试器(JavaScript) (opens new window)

# 正则表达式手册

转载:正则表达式手册 (opens new window)

下面是表中常用的表达式:

# 匹配位置

这类字符匹配位置,不匹配字符。

  • ^ $:匹配开始和结束
  • \b:匹配单词边界
  • \B:匹配非单词边界(大写为取反,爱了爱了)

# 匹配多个字符

  • {n}:匹配确定的 n 次
  • {n,}:至少匹配 n 次
  • {n,m}:匹配至少 n 次,至多 m 次
  • *:等价于 {0,}
  • +:等价于 {1,}
  • ?:等价于 {0,1}

上述表达式均为贪婪模式(匹配最多的字符);在表达式后增加 ? (如 {n,m}?)为非贪婪模式(匹配最少的字符)。

# 匹配字符

  • .:匹配除 \n 的单个字符
  • x|y:匹配 xy 单个字符
  • [xyz](字符集合):匹配所包含的任意一个字符,等价于 x|y|z
  • [xyz](负值字符集合):匹配未包含的任意字符
  • [a-z](字符范围):匹配指定范围内的任意字符
  • [^a-z](负值字符范围):匹配任何不在指定范围内的任意字符

# 匹配字符(转义)

  • \cx:匹配由 x 指明的控制字符。例如,\cM 匹配一个Control-M或回车符。x的值必须为[A-Za-z]之一
  • \d:匹配一个数字字符。等价于[0-9]
  • \D:匹配一个非数字字符。等价于[^0-9]
  • \f \n \r \t \v:匹配一个换页符、换行符、回车符、制表符、垂直制表符
  • \s:匹配任何空白字符,等价于 [ \f\n\r\t\v](注意有一个空格)
  • \S:匹配上一行以外的字符。等价于 [^ \f\n\r\t\v]
  • \w:匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_]
  • \W:匹配上一行以外的字符
  • \num:匹配 num,其中num是一个正整数。对所获取的匹配的引用。例如,(.)\1 匹配两个连续的相同字符。

# 彩蛋:匹配网址的正则表达式

( regexpTaobao = regexp.MustCompile(`¥([\w\s]+)¥`) regexpURL = regexp.MustCompile(`(?:http|https|www)(?:[\s\.:\/\/]{1,})([\w%+:\s\/\.?=]{1,})`) regexpWhitelist = regexp.MustCompile(`((acg|im9|bili|gov).*(com|html|cn|tv)|(av\d{8,}|AV\d{8,}))`) regexpQQ = regexp.MustCompile(`(?:[加qQ企鹅号码\s]{2,}|[群号]{1,})(?:[\x{4e00}-\x{9eff}]*)(?:[:,:]?)([\d\s]{6,})`) regexpWechat = regexp.MustCompile(`(?:[加+微++➕薇?vV威卫星♥❤姓xX信]{2,}|weixin|weix)(?:[,❤️.\s]?)(?:[\x{4e00}-\x{9eff}]?)(?:[:,:]?)([\w\s]{6,})`) )