千家信息网

正则表达式中元字符怎么用

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍正则表达式中元字符怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Ja
千家信息网最后更新 2024年11月24日正则表达式中元字符怎么用

这篇文章主要介绍正则表达式中元字符怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体如下:

注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。

一、对特殊字符进行转义

元字符是一些在正则表达式里有着特殊含义的字符。因为元字符在正则表达式里有着特殊的含义,所以这些字符就无法用来代表它们本身。在元字符前面加上一个反斜杠就可以对它进行转义,这样得到的转义序列将匹配那个字符本身而不是它特殊的元字符含义。如,如果想要匹配[和],就必须对它进行转义:


对元字符转义需要用到斜杠\字符,这就意味着\字符本向也是一个元字符,要匹配\字符本身,必须转义成\\。如匹配windows文件路径。

二、匹配空白字符

元字符大致可以分为两种:一种是用来匹配文本的(如.),另一种是正则表达式的语法所要求的(如[和])。

在进行正则表达式搜索的时候,我们经常会遇到需要对原始文本中里的非打印空白字符进行匹配的情况。比如说,我们可能需要把所有的制表符找出来,或者我们需要把换行符找出来,这类字符很难被直接输入到一个正则表达式里,这时我们可以使用如下列出的特殊元字符来输入它们:

\b回退(并删除)一个字符(Backspace键)
\f换页符
\n换行符
\r回车符
\t制表符(Tab键)
\v垂直制表符

来看一个例子,把文件中的空白行去掉:

文本:

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 26 7 8 4 9 1 5
4 8 9 5 3 1 7 6 2
1 7 5 2 9 6 4 8 3

正则表达式:\r\n\r\n

分析:\r\n匹配一个回车+换行组合,windows操作系统中把它作为文本行的结束标签。使用正则表达式\r\n\r\n进行的搜索将匹配两个连续的行尾标签,而这正好是空白行。

注意:Unix和Linux操作系统中只使用一个换行符来结束一个文本行,换句话说,在Unix或Linux系统中匹配空白行只使用\n\n即可,不需要加上\r。同时适用于windows和Unix/Linux的正则表达式应该包括一个可先的\r和一个必须匹配的\n,即\r?\n\r?\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, 0, len);  }  String reg = "\r\n\r\n";  System.out.println("原内容:\n" + sb.toString());  System.out.println("处理后:-----------------------------");  System.out.println(sb.toString().replaceAll(reg, "\r\n"));}

运行结果如下:

原内容:8 5 4 1 6 3 2 7 97 6 2 9 5 8 3 4 19 3 1 4 2 7 8 5 66 9 3 8 7 5 1 2 45 1 8 3 4 2 6 9 72 4 7 6 1 9 5 3 83 2 6 7 8 4 9 1 54 8 9 5 3 1 7 6 21 7 5 2 9 6 4 8 3 处理后:-----------------------------8 5 4 1 6 3 2 7 97 6 2 9 5 8 3 4 19 3 1 4 2 7 8 5 66 9 3 8 7 5 1 2 45 1 8 3 4 2 6 9 72 4 7 6 1 9 5 3 83 2 6 7 8 4 9 1 54 8 9 5 3 1 7 6 21 7 5 2 9 6 4 8 3

三、匹配特定的字符类别

字符集合(匹配多个字符中的某一个)是最常见的匹配形式,而一些常用的字符集合可以用特殊元字符来代替。这些元字符匹配的是某一类别的字符(类元字符),类元字符并不是必不可少的,因为可以通过逐一列举有关字符或通过定义一个字符区间来匹配某一类字符,但是使用它们构造出来的正则表达式简明易懂,在实际应用中很常用。

1、匹配数字与非数字

\d 任何一个数字,等价于[0-9]或[0123456789]
\D 任何一个非数字,等价于[^0-9]或[^0123456789]

2、匹配字母和数字与非字母和数字

字母(A-Z不区分大小写)、数字、下划线是一种常用的字符集合,可用如下类元字符:

\w 任何一个字母(不区分大小写)、数字、下划线,等价于[0-9a-zA-Z_]
\W 任何一个非字母数字和下划线,等价于[^0-9a-zA-Z_]

3、匹配空白字符与非空白字符

\s 任何一下空白字符,等价于[\f\n\r\t\v]
\S 任何一下空白字符,等价于[^\f\n\r\t\v]

注意:退格元字符\b没有不在\s的范围之内。

4、匹配十六进制或八进制数值

十六进制:用前缀\x来给出,如:\x0A对应于ASCII字符10(换行符),其效果等价于\n。
八进制:用前缀\0来给出,数值本身可以是两位或三位数字,如:\011对应于ASCII字符9(制表符),其效果等价于\t。

四、使用POSIX字符类

POSIX字符类是很多正则表达式实现都支持的一种简写形式。Java也支持它,但JavaScript不支持。POSIX字符如下所示:

[:alnum:]任何一个字母或数字,等价于[a-zA-Z0-9]
[:alpha:]任何一个字母,等价于[a-zA-Z]
[:blank:]空格或制表符,等价于[\t]
[:cntrl:]ASCII控制字符(ASCII 0到31,再加上ASCII 127)
[:digit:]任何一个数字,等价于[0-9]
[:graph:]任何一个可打印字符,但不包括空格
[:lower:]任何一个小写字母,等价于[a-z]
[:print:]任何一个可打印字符
[:punct:]既不属于[:alnum:]和[:cntrl:]的任何一个字符
[:space:]任何一个空白字符,包括空格,等价于[^\f\n\r\t\v]
[:upper:]任何一个大写字母,等价于[A-Z]
[:xdigit:]任何一个十六进制数字,等价于[a-fA-F0-9]

POSIX字符和之前见过的元字符不太一样,我们来看一个前面利用正则表达式来匹配网页中的颜色的例子:

文本:测试

正则表达式:#[[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]]

结果:测试

注意:这里使用的模式以[[开头、以]]结束,这是使用POSIX字符类所必须的,POSIX字符必须括在[:和:]之间,外层[和]字符用来定义一个集合,内层的[和]字符是POSIX字符类本身的组成部分。

在java中的POSIX字符表示有所不同,不是包括在[:和:]之间,而是以\p开头,包括在{和}之间,且大小写有区别,同时增加了\p{ASCII},如下所示:

\p{Alnum}字母数字字符:[\p{Alpha}\p{Digit}]
\p{Alpha}字母字符:[\p{Lower}\p{Upper}]
\p{ASCII}所有 ASCII:[\x00-\x7F]
\p{Blank}空格或制表符:[ \t]
\p{Cntrl}控制字符:[\x00-\x1F\x7F]
\p{Digit}十进制数字:[0-9]
\p{Graph}可见字符:[\p{Alnum}\p{Punct}]
\p{Lower}小写字母字符:[a-z]
\p{Print}可打印字符:[\p{Graph}\x20]
\p{Punct}标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Space}空白字符:[ \t\n\x0B\f\r]
\p{Upper}大写字母字符:[A-Z]
\p{XDigit}十六进制数字:[0-9a-fA-F]

以上是"正则表达式中元字符怎么用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

字符 正则 表达式 数字 等价 元字符 字母 空白 特殊 制表符 转义 制表 例子 文本 之间 内容 十六进制 换行符 空格 下划线 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 91连接服务器中 网络安全管理实验 第三代数据库系统的特点 员工网络安全培训pdf下载 网络安全征文200字四年级 怀旧服60级服务器战士 沭阳工业网络技术保养 客户端服务器时间同步 抚州个人服务器哪家公司好 c读取access数据库 网络安全大赛是什么样的比赛 p2p网络技术如何突破内网 智能网络服务器信息采集管理 服务器读不到u盘上的pe 宝灵互联网科技有限公司 win10开启服务器的远程访问 上海证券交易所数据库 红包扫雷软件开发现成app 服务器返回的图片验证码破解 ntp时间同步服务器ip地址 大兴区省电软件开发推广 网络技术教材pdf 数据库各个阶段的设计 中国网络安全坚定维护者 中学生网络安全教育短视频 万方数据库为用户 win7ftp服务器配置 闵行区会计网络技术中心收费 公安一所招聘网络安全人才 服务器能提供网络资源和网络管理
0