JobPlus知识库 互联网 互联网+ 文章
给产品经理讲技术|一步一步写爬虫:正则表达式

匹配字符串的意思是,你先定义一套规则,然后根据这套规则去一个字符串里找那些符合规则的字符串。

你可能会问,这不就是搜索吗?的确,当你在百度上敲入「癌症」两个字的时候,搜索引擎也会在它事先存好的网页里匹配「癌症」这两个字。道理是一样的,但是搜索只能精确的查找某个具体的单词,正则表达式却可以匹配「一类」东西。

比如你定义了一个正则表达式叫d+,表示只要出现一个或多个数字,就匹配成功,就是这个意思。

这有点像你去相亲,先定义了一套正则表达式的规则,比如身高180+、有房有车有车位,然后去相亲网上去找,最后系统给你找到了10个男生,这样就算是匹配成功了。而搜索的话,你就需要精确的输入你想找的人的姓名,然后匹配的结果也很可能只有一个。

介绍完概念,现在就要进入正题了,如何写一个正则表达式?

我们从最简单的开始。假如你想匹配一个词「play」,那么你就写正则表达式「play」,如果你的字符串为「play game」,恭喜你,匹配成功。

但是,「play」这个正则表达式也会匹配到「player」、「playboy」之类的,而你只想找单独存在的单词「play」,那你需要在你的表达式里加上,它的意思是单词的分界。然后你的表达式就成了「play」。

被称为元字符,元字符是从普通字符里选出来的特殊字符,有着特殊的含义。

比如w,可以代表一个单词和数字。

再比如d,可以代表一个数字。

还有s,表示空白符。

还有「.」,可以匹配任意字符。

现在,如果我要匹配8位数的QQ号码,你可以写成dddddddd。

好麻烦啊,要匹配18位的身份证号,是不是要写18个d呢?还好,我们有表示数量的限定符,比如「{ }」。18位的身份证号(只考虑数字)可以写成d{18}.

类似的,还有「*」,表示任意数目。还有「+」,表示最少1个。还有「?」,表示最多1个。

现在你要匹配一个小数,例如3.1415926,你可以用这样的正则表达式:「d+.d*」。

解释一下,前两个d+很好理解,表示小数点前面有至少1个数字。后面d*表示小数点可以有任意个数字。中间的小数点为什么加了一个反斜杠呢?试想一下,如果没有反斜杠,小数点就是一个元字符,用来表示任意字符了。加了反斜杠之后,就回归本意,单纯的表示一个小数点了。

正则表达式还有很多规则,一篇文章讲不完,你们可以先了解下原理,然后去网上找资料。最后说下正则表达式的应用之处吧。

验证用户输入是否合法。昨天的文章讲防范SQL注入的时候,可以用正则表达式来匹配用户提交的表单信息。比如规定用户名只能是数字、字母和下划线,可以用「^w+$」。

从你爬下来的网页数据里提取信息。这个需要分析文章结构,然后找到信息的特征,用正则表达式来提取。

当然,有关部门还可以用正则表达式来过滤敏感词。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
171人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序