跳转至

正则表达式极简入门

在文章后有补充一些例子以方便理解

1. 量词

1.1 ?

表示?前的字符可有可无

1.2 *

表示*前的字符可出现零次、一次或多次

1.3 +

表示+前的字符可出现一次或多次

1.4 {}

限定字符出现次数

{x,y}匹配出现次数在闭区间\([x,y]\)之间的内容,省略则到无穷或0

以上均可与括号搭配匹配多个字符

2. 运算

2.1 或

|表示选择运算符,同时匹配前后

注意

用括号表明层级关系

2.2 预搜索

匹配后面是/不是exp1exp2

(?=exp1)exp2
(?!exp1)exp2

匹配前面是/不是exp1exp2

(?<=exp1)exp2
(?<!exp1)exp2

3. 字符类

3.1 按范围匹配

[]表示字符可以取自一个范围

例如:[abc] [a-zA-Z] [a-z0-9] [a-Z]

后方添加+表明匹配连续的一串,否则逐字符进行匹配

^表示取反

例如:[^a-zA-Z]表示匹配英文字母外的所有字符(包括换行符)

3.2 元字符

\d: 所有数字
\w: 单词——英文、数字、上下划线
\s: 空白符——空格 Tab 换行
\b: 单词字符的边界
\n: 换行符
\r: 回车符
\t: Tab
\v: 垂直制表符
\\: 转义,匹配\本身

W、S、D大写表示取反

.表示任意字符,不包括换行符

^在字符后只会匹配行首,$在字符后只会匹配行尾

3.3 贪婪匹配和懒惰匹配

对于<span><b> html </b></span>这样的内容<.+>会全部匹配(默认<属于.的范围>),需要使用<.+?>改为懒惰匹配

方法:在量词后加?

4. 例子

在爬虫中,我们常用.*?匹配所需要获取的链接等文字

例如下面这一正则表达式会匹配所有的超链接,注意?是必须的,否则会执行贪婪匹配:

<a href="(.*?)" class="img" target="_blank"

下面这个例子会在一大串文本(最好是中文)中匹配http(s)链接:

https{0,1}:[\/:a-zA-Z.%&=0-9-?+_]+

s后的大括号表示s可有可无,在其后的中括号列出了链接中可能出现的各种字符


作者:WJS
文档创建时间:2022-11-18 22:28:32
最后修改时间:2023-01-25 12:49:12