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 常用限定符