前言
先说点别的。一般来说,听到一个计算机科学的名词的中文,可能猜不到这是什么,但是听到英文就很好理解了。
正则表达式(regular expression)这个概念,是少数的,我听了英文以后还猜不知道是什么的概念之一。
正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
linux 中支持用正则表达式检索文本的有 sed
和 grep
,Python 中有 re
模块,JavaScript 中有 RegExp
对象和 String.match()
等方法。
教程:正则表达式30分钟入门教程
正则表达式手册
转载:正则表达式手册
下面是表中常用的表达式:
匹配位置
这类字符匹配位置,不匹配字符。
^
$
:匹配开始和结束\b
:匹配单词边界\B
:匹配非单词边界(大写为取反,爱了爱了)
匹配多个字符
{n}
:匹配确定的 n 次{n,}
:至少匹配 n 次{n,m}
:匹配至少 n 次,至多 m 次*
:等价于{0,}
+
:等价于{1,}
?
:等价于{0,1}
上述表达式均为贪婪模式(匹配最多的字符);在表达式后增加 ?
(如 {n,m}?
)为非贪婪模式(匹配最少的字符)。
匹配字符
.
:匹配除\n
的单个字符x|y
:匹配x
或y
单个字符[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
匹配两个连续的相同字符。
彩蛋:匹配网址的正则表达式
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,})`) ) |