正则表达式的学习

//资料来源:菜鸟教程

教程针对小白,所以会很啰嗦很啰嗦很啰嗦。。。。

引入

“正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。”(摘自“菜鸟教程”)

实践

具体每个符号的含义请看菜鸟教程的介绍:正则表达式 - 语法

例子:对URL的处理

背景

在对某个网站进行爬取的过程中,我们可能需要分析URL中包含的各种信息。如果URL数量太多的话肯定不能由人工来对URL进行处理,这时候正则表达式就派上用场了

假设我们需要对以下URL进行分析

http://www.test.top:80/eval/index.html

开干

如果看不懂正则表达式没关系,先跳过去,我在后面会解释一下的

为了方便,我们使用菜鸟教程提供的环境进行学习,菜鸟教程在线编辑器

进去以后把url改成我们需要进行测试的url就可以了(当然你也可以使用他设定好的url,原理都差不多)

截图如下(先不输入正则表达式,一步一步来):

如图所示,patt1就是存储正则表达式的变量

*正则表达式是需要用//包起来的,例如patt1 = /正则表达式/

第一步,获取协议名

可以使用下面的正则:

/(\w+)/

结果如下:

对正则的分析

()的作用

()是将正则匹配到的结果存储在数组中

比如说刚刚使用/\w+/匹配到了http,则将匹配结果结果存储在arr中,再由js中的for循环输出,所以屏幕中就会出现两个http,第一个http是经整个正则表达式处理之后产生的结果,存储在arr[0],第二个则是()中匹配到的内容,存储在arr[1]中。

\w+的作用

\w:匹配包括下划线的任何单词字符,这里的”单词”字符使用Unicode字符集,即只要是Unicode字符集里有的,都能匹配。

+:匹配前面的子表达式一次或多次

注意特殊字符(如+*?等字符)都只对它前面的字符生效

比如在正则表达式/ab[0-9]+/中,+只对[0-9]生效

合起来看,\w+的含义就是

匹配任何单词字符一次或多次

在这个例子里,\w+的流程就是:

‘h’属于Unicode字符集?属于,下一个

‘t’属于Unicode字符集?属于,下一个

‘t’属于Unicode字符集?属于,下一个

‘p’属于Unicode字符集?属于,下一个

‘:’属于Unicode字符集?不属于,结束

还有疑问的话就去菜鸟教程看看+具体是什么意思

第二步,获取域名

可以使用下面的正则:

/\w+:\/\/([^:]+)/

结果如下:

对正则的分析

\的作用

\就是转义符,将其后的字符只当做普通字符来处理。

^的作用

^有两种作用

第一,表示开头

例如/^a/表示匹配以a开头的字符

第二,表示‘非’

例如/{[^:]+/中表示匹配一次或多次(+的作用),直到字符为:时停止(^:的作用)

第三步,获取端口号

可以使用下面的正则:

/\w+:\/\/[^:]+:(\d+)/

结果如下:

对正则的分析

\d的作用

匹配数字,相当于[0-9]

第四步,获取文件路径

可以使用下面的正则:

/\w+:\/\/[^:]+:\d+([^z]+)/

如果前面写的都懂了的话,这部分应该也懂,不解释了


如果我的文章能帮到您的话我会很开心.如需转载记得注明出处:)
目录