网络数据采集技术:Java网络爬虫实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.9 正则表达式

正则表达式指由普通字符(如英文字母/数字等)以及特殊字符(如元字符“\D”)组成的字符串模式。正则表达式可以理解成一套模板,以这套模板可以匹配字符串。例如,从下面HTML片段中提取用户的id(75975500)。

第5章会介绍一些HTML网页解析工具,如上面的HTML片段,使用Jsoup可直接解析得到字符串“//i.********.com.cn/75975500”。针对这个字符串,调用String类中的replaceAll(String regex, String replacement)方法,可成功剔除非数字字符(元字符“\D”表示非数字字符),进而提取用户id,如程序2-17所示。其中,replaceAll()方法的作用是替换字符串中的某段内容,参数regex为正则表达式,replacement为替换的内容。

程序2-17

另外,分解某字符串也常使用正则表达式,如将字符串“正则表达式-CSDN博客”分割为“正则表达式”和“CSDN博客”两个字符串,可利用String类中的split(regex)方法对原字符串进行操作,如程序2-18所示。其中,正则表达式“\\p{Punct}”匹配的是标点符号。

程序2-18

表2.3列举了常用元字符以及它们的正则表达式写法。

表2.3 常用元字符及其含义

续表

在正则表达式中,常用方括号括起若干字符表示一个元字符,该元字符匹配的是括号内的任意一个字符。例如,String regex=“[abc]123”匹配的是“a123”,“b123”,“c123”。表2.4列举了一些包含方括号的元字符。

表2.4 包含方括号的元字符

程序2-19演示了表2.4中元字符的使用,图2.19所示为该程序的输出结果。

程序2-19

图2.19 程序2-19的输出结果

为了适应匹配的不确定性,正则表达式支持限定符的概念。限定符定义了某些元素可以出现的频次。例如,X{n,m}表示X出现n到m次的字符都可以匹配,使用“ac{1,3}”可以匹配“ac”、“acc”和“accc”。表2.5列举了常用的限定符。

表2.5 常用限定符