正则表达式(regular expression,简称regex)是一些用来匹配和处理文本的字符串。正则表达式语言并不是一种完备的语言,他是内置于其他语或软件产品里的“迷你”语言。正则表达式的使用无非两种情况:一种是查找特定的信息(搜索),另一种是查找并编辑特定的信息(替换)。学习正则表达式对我们学习爬虫很有帮助。本文是学习美国知名技术作家Ben Forta编写的《Sam Teach Yourself Regular Expression in 10 Minutes》的中文翻译版《正则表达式必知必会》的学习笔记。书中提供的正则表达式测试工具的链接如下:http://www.forta.com/books/0672325667/.
. (点)字符可以匹配任何单个的字符(除了换行符)
[] 用来定义字符集合 字符集合中可以使用连字符-来简化字符区间的定义,如[0123456789abcd]可以简化为[0-9a-d] 连字符按照ASCII码顺序来计算区间
^ 取非字符 ^的效果作用于给定的字符集合里所有字符,而不是紧跟其后的一个字母如[^0-9a-z]
\ 转义字符 任何一个元字符都可以通过在其前加一个\将其转义 配对的元字符不用做元字符时必须转义如[] 有时候喜欢把转义字符加上字符集合 [\n]增加可读性
空白元字符
\n 换行符
\r 回车符
\t 制表符(Tab)
\v 垂直制表符
\f 换页符
[\b] 回退键 Backspace
\r\n 匹配一个 回车+换行 组合 (windows系统下)
匹配数字
\d 任何一个数字字符 等价于[0-9]
\D 任何一个非数字字符 等价于[^0-9]
匹配字母和数字或下划线
\w 任何一个字母数字字符或下划线字符 等价于[a-zA-Z0-9_]
\W 任何一个非字母数字字符或非下划线字符 等价于[^a-zA-Z0-9_]
匹配空白字符
\s 任何一个空白字符 等价于[\f\n\r\t\v] ([\b] 除外)
\S 任何一个非空白字符 等价于[^\f\n\r\t\v]
匹配一个或多个字符
+ 匹配至少一个或者多个字符 给字符或者字符集合加上+的后缀(放在字符集合的后面),表示匹配同一个字符的多次重复 如\w+[09]+
注:[0-9+]表示数字0-9和+的构成的字符集合(同样还有.)
匹配零个或多个字符
* 匹配一个字符连续出现零次或多次的情况 用法同+ 区别在于匹配的字符可有可无 可以理解为在*前面的字符是可选的
匹配零个或者有一个字符
? 匹配一个字符的零次或者一次出现 如 https? 这个s可以出现0次也就是匹配到http 或者可以出现一次匹配到https
匹配重复次数
如果想给匹配的重复次数设定一个精确值,在{}加上确定的数字 如\d{3}表示模式里前一个字符或字符集合必须出现3次才算是一个匹配
设定区间
{2,4}至少重复两次,最多重复四次
{3,}至少重复3次
贪婪型与懒惰型
*和+都是贪婪型的元字符,他们在匹配时往往是多多益善,
懒惰型元字符是在其后加上? 变为 *? +?