- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章正则表达式教程之元字符的使用详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了正则表达式教程之元字符的使用。分享给大家供大家参考,具体如下:
注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过.
1、对特殊字符进行转义 。
元字符是一些在正则表达式里有着特殊含义的字符。因为元字符在正则表达式里有着特殊的含义,所以这些字符就无法用来代表它们本身。在元字符前面加上一个反斜杠就可以对它进行转义,这样得到的转义序列将匹配那个字符本身而不是它特殊的元字符含义。如,如果想要匹配[和],就必须对它进行转义:
和 .
对元字符转义需要用到斜杠\字符,这就意味着\字符本向也是一个元字符,要匹配\字符本身,必须转义成\\。如匹配windows文件路径.
2、匹配空白字符 。
元字符大致可以分为两种:一种是用来匹配文本的(如.),另一种是正则表达式的语法所要求的(如[和]).
在进行正则表达式搜索的时候,我们经常会遇到需要对原始文本中里的非打印空白字符进行匹配的情况。比如说,我们可能需要把所有的制表符找出来,或者我们需要把换行符找出来,这类字符很难被直接输入到一个正则表达式里,这时我们可以使用如下列出的特殊元字符来输入它们:
。
\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代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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"
));
}
|
运行结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
原内容:
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
|
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.
4、使用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字符和之前见过的元字符不太一样,我们来看一个前面利用正则表达式来匹配网页中的颜色的例子:
文本:<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},如下所示:
。
\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] |
希望本文所述对大家正则表达式学习有所帮助.
最后此篇关于正则表达式教程之元字符的使用详解的文章就讲到这里了,如果你想了解更多关于正则表达式教程之元字符的使用详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在做一个关于代码学院的教程,我在这里收到一个错误,说“看起来你的函数没有返回‘唉,你没有资格获得信用卡。资本主义就是这样残酷。’”当收入参数为 75 时。”但是该字符串在控制台中返回(由于某种原因
我正在阅读 Go 的官方教程,但很难理解 Channel 和 Buffered Channels 之间的区别。教程的链接是 https://tour.golang.org/concurrency/2和
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
作为 iOS 新手,有大量书籍可以满足学习基础知识的需求。现在,我想转向一些高级阅读,例如 OAuth 和 SQLite 以及动态 API 派生的 TableView 等。您可以推荐任何资源吗? 最佳
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
前言 很多同学都知道,我们常见的CTF赛事除了解题赛之外,还有一种赛制叫AWD赛制。在这种赛制下,我们战队会拿到一个或多个服务器。服务器的连接方式通常是SSH链接,并且可能一个战队可能会同时有
Memcached是一个自由开源的,高性能,分布式内存键值对缓存系统 Memcached 是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象),这些数据可以是数据库调用、A
Perl 又名实用报表提取语言, 是 Practical Extraction and Report Language 的缩写 Perl 是由 拉里·沃尔(Larry Wall)于19
WSDL 是 Web Services Description Language 的缩写,翻译成中文就是网络服务描述语言 WSDL 是一门基于 XML 的语言,用于描述 Web Services 以
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我正在寻找解释在 WPF 中创建自定义用户控件的教程。 我想要一个控件,它结合了一个文本 block 、一个文本框和一个启动通用文件打开对话框的按钮。我已经完成了布局,一切都连接好了。它有效,但它是三
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我接近 fourth page of the Django tutorial 的开始看着vote查看,最后是这样的: # Always return an HttpResponseRedirect a
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
是否有任何好的 Qt QSS 教程,或者在某个地方我可以看到样式小部件的示例?如果某处可用,我想要一些完整的引用。除了有关如何设置按钮或某些选项卡样式的小教程外,我找不到任何其他内容。 最佳答案 Qt
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!