千家信息网

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

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍正则表达式中元字符怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Ja
千家信息网最后更新 2025年01月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安全错误 数据库的锁怎样保障安全 网络安全保密工作必要性 ERP软件开发合同样本 供应实时数据库厂家 全国成立网络安全学院的高校 数据库包含数据库系统吗 工业软件开发专升本考什么 学好数据库开发需要多久 数字孪生和数据库的关系 北京黑熊网络技术有限公司 湖北统一软件开发服务价格优惠 api在软件开发中简称 a840r-h服务器电源 软件开发用笔记本如何挑选 如何激活软件开发团队效率 服务器跟踪日志 博山crm管理软件开发 iperf3服务器和客户端 曲阜师范大学网络安全 青海网络技术开发包括什么 关于网络安全方面的课题研究 网络安全生产教育心得体会 服务器cpu如何降核 如何用笔记本电脑搭建服务器 服务器虚拟化之计算资源管理 发票 数据库 什么是非安全逻辑服务器 连接dota2协调服务器 云服务器交的钱给谁 医院户籍管理系统是什么数据库 提示非法的数据库文件
0