正则表达式教程之元字符的使用详解
本篇章节讲解正则表达式教程之元字符的使用。分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。 一、对特殊字符进行转义 元字符是一些在正则表达式里有着特殊含义的字符。因为元字符在正则表达式里有着特殊的含义,所以这些字符就无法用来代表它们本身。在元字符前面加上一个反斜杠就可以对它进行转义,这样得到的转义序列将匹配那个字符本身而不是它特殊的元字符含义。如,如果想要匹配[和],就必须对它进行转义: 和 对元字符转义需要用到斜杠字符,这就意味着字符本向也是一个元字符,要匹配字符本身,必须转义成。如匹配windows文件路径。 二、匹配空白字符 元字符大致可以分为两种:一种是用来匹配文本的(如.),另一种是正则表达式的语法所要求的(如[和])。 在进行正则表达式搜索的时候,我们经常会遇到需要对原始文本中里的非打印空白字符进行匹配的情况。比如说,我们可能需要把所有的制表符找出来,或者我们需要把换行符找出来,这类字符很难被直接输入到一个正则表达式里,这时我们可以使用如下列出的特殊元字符来输入它们:
来看一个例子,把文件中的空白行去掉: 文本: 8 5 4 1 6 3 2 7 9 6 9 3 8 7 5 1 2 4 3 26 7 8 4 9 1 5 正则表达式:rnrn 分析:rn匹配一个回车+换行组合,windows操作系统中把它作为文本行的结束标签。使用正则表达式rnrn进行的搜索将匹配两个连续的行尾标签,而这正好是空白行。 注意:Unix和Linux操作系统中只使用一个换行符来结束一个文本行,换句话说,在Unix或Linux系统中匹配空白行只使用nn即可,不需要加上r。同时适用于windows和Unix/Linux的正则表达式应该包括一个可先的r和一个必须匹配的n,即r?nr?n,这将会在后面的文章中讲到。 Java代码如下: public static void matchBlankLine() throws Exception{ BufferedReader br = new BufferedReader(new FileReader(new File("E:/九宫格.txt"))); StringBuilder sb = new StringBuilder(); char[] cbuf = new char[1024]; int len = 0; while(br.ready() && (len = br.read(cbuf)) > 0){ br.read(cbuf); sb.append(cbuf,len); } String reg = "rnrn"; System.out.println("原内容:n" + sb.toString()); System.out.println("处理后:-----------------------------"); System.out.println(sb.toString().replaceAll(reg,"rn")); } 运行结果如下: 原内容: 8 5 4 1 6 3 2 7 9 7 6 2 9 5 8 3 4 1 9 3 1 4 2 7 8 5 6 6 9 3 8 7 5 1 2 4 5 1 8 3 4 2 6 9 7 2 4 7 6 1 9 5 3 8 3 2 6 7 8 4 9 1 5 4 8 9 5 3 1 7 6 2 1 7 5 2 9 6 4 8 3 处理后:----------------------------- 8 5 4 1 6 3 2 7 9 7 6 2 9 5 8 3 4 1 9 3 1 4 2 7 8 5 6 6 9 3 8 7 5 1 2 4 5 1 8 3 4 2 6 9 7 2 4 7 6 1 9 5 3 8 3 2 6 7 8 4 9 1 5 4 8 9 5 3 1 7 6 2 1 7 5 2 9 6 4 8 3 三、匹配特定的字符类别 字符集合(匹配多个字符中的某一个)是最常见的匹配形式,而一些常用的字符集合可以用特殊元字符来代替。这些元字符匹配的是某一类别的字符(类元字符),类元字符并不是必不可少的,因为可以通过逐一列举有关字符或通过定义一个字符区间来匹配某一类字符,但是使用它们构造出来的正则表达式简明易懂,在实际应用中很常用。 1、匹配数字与非数字 d 任何一个数字,等价于[0-9]或[0123456789] 2、匹配字母和数字与非字母和数字 字母(A-Z不区分大小写)、数字、下划线是一种常用的字符集合,可用如下类元字符: w 任何一个字母(不区分大小写)、数字、下划线,等价于[0-9a-zA-Z_] 3、匹配空白字符与非空白字符 s 任何一下空白字符,等价于[fnrtv] 注意:退格元字符b没有不在s的范围之内。 4、匹配十六进制或八进制数值 十六进制:用前缀x来给出,如:x0A对应于ASCII字符10(换行符),其效果等价于n。 四、使用POSIX字符类 POSIX字符类是很多正则表达式实现都支持的一种简写形式。Java也支持它,但JavaScript不支持。POSIX字符如下所示:
POSIX字符和之前见过的元字符不太一样,我们来看一个前面利用正则表达式来匹配网页中的颜色的例子: 文本:<span style="background-color:#3636FF;height:30px;width:60px;">测试</span> 正则表达式:#[[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] 结果:<span style="background-color:【#3636FF】;height:30px;width:60px;">测试</span> 注意:这里使用的模式以[[开头、以]]结束,这是使用POSIX字符类所必须的,POSIX字符必须括在[:和:]之间,外层[和]字符用来定义一个集合,内层的[和]字符是POSIX字符类本身的组成部分。 在java中的POSIX字符表示有所不同,不是包括在[:和:]之间,而是以p开头,包括在{和}之间,且大小写有区别,同时增加了p{ASCII},如下所示:
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用: JavaScript正则表达式在线测试工具: 正则表达式在线生成工具: 希望本文所述对大家正则表达式学习有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |