没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
李树花开,风中摇曳!
-1-
一.正则表达式简介
1.什么是正则表达式 (Regular Expressions)
是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符
串。有点拗口,呵呵,说白了就是用来描述字符串的字符串。更直白点说它就是
一个字符串,呵呵,够直白吧,那它有什么用呢? good question。
2.正则表达式的作用
用来对文本也就是字符串进行查找和替换。我估计有点电脑基础的人都知道
Ctrl+F,当我们打开一个文件需要查找我们需要的内容时都会想到用 Ctrl+F 打
开一个查找对话框,输入我们要查找的内容,点查找就 OK 了。但是这种查找方
式的能力是非常有限的,我们只能查找一个字,一句话等等。当你觉得这种查找
方式无法满足你要求的时候,正则表达式拯救你的时候到了,学习正则表达式的
门槛非常低,而且易于学习,一旦你掌握了正则表达式你就会感叹当初没有正则
表达式的日子是怎么过的。
3.支持正则表达式的工具
几乎所有的文本编辑器,如:UltraEdit,EmEditor 等。
几乎所有的编程语言,如:Java, VB.NET, C#, PHP, Perl, Python,
Tcl 等。
好多基于 Linux 的工具,如:grep,egrep,awk,sed,lex 等。
4.一个简单的例子
学习正则表达式我们需要一个运行和测试正则表达式的环境,当然上面提到
的工具都可以,文本编辑器对初学者来说更直观一些,所以本人以后的所有例子
都通过 EmEditor 来讲解,EmEditor 是一个非常不错的文本编辑器,它的免费
版本就足够我们使用了。当然了,总有些人就是嫌麻烦不想装这些乱七八糟的软
件,其实网上有好多在线测试正则表达式的网站,你可以在 Google 中搜索关键
字正则表达式在线测试,这样就可以省去你安装软件的烦恼。
下面我们来看一个简单的例子,比如你想在一个文件中查找张三,很 easy,
Ctrl+F 然后搜索张三就 OK 了,但是如果你想查找张三或李四,怎么办?一个
很自然的想法是分两次进行,先查张三,然后查李四。这样做是可以的,有没有
办法一次搞定呢,答案是肯定的,试着搜索一下下面的字符串查看结果:
张三|李四
李树花开,风中摇曳!
-2-
啊?不好使啊?呵呵,别着急,选中搜索对话框中的使用正则表达式(Use
Regular Expressions)再试一试。那这个正则表达式是什么意思呢? 别着急,
你很快就会知道。
5.谁适合学习正则表达式
不论你从事什么职业,如果你经常要进行文本操作,大量的重复性劳动你觉
得很没意思,那么赶快学习正则表达式吧。如果你是程序员并且还不熟悉正则表
达式,那么别人会鄙视你。你还在等什么呢?
二.匹配任何字符:点号(.)
假设现在让你把一个文件中的的英文句号(.)替换为中文句号(。),是不是
很 easy, 呵呵,在 EmEditor 中 Ctrl+H 调出 Replace 对话框,在 Find
中输入英文句号(.),在 Replace With 中输入中文句号(。),然后轻轻点击
Replace Al l 就搞定了。 我们按 Ctrl+Z 撤销我们刚才的替换,然后我们
选中 Replace 对话框中的 Use Regular Expressions,再次优雅的点击一下
Replace Al l,奇迹出现了,文件中所有的字都被替换为句号了,这不是我们
想要的,为什么会出现这种情况呢?因为点号(.)在正则表达式中具有特殊意义,
它可以代表任何字符。我们把像点号这类在正则表达式中具有特殊意义的字符称
为元字符(Metacharacter),正因为有了它们才成就了正则表达式强大的模糊
匹配能力。
恭喜你,你已经学会了第一个元字符,我们将它添加到我们的工具箱中,别
着急,你很快就会学会更多的元字符,到那时你将到达一个全新的高度。
元字符
名称
匹配对象
.
点号(dot)
单个任意字符
三.匹配行的起始(^)和结束($)
假设我们有这样一个文件,文件中的每一行包含一个公司名,我们想把这些
公司名用双引号括起来,怎么办?用正则表达式解决这个问题很 easy,我们分
两步来进行:
1. 在 EmEditor 中 Ctrl+H 调出 Replace 对话框,在 Find 中输入^,
在 Replace With 中输入",然后轻轻的点击 Replace Al l,我们就每一行
的开头添加了双引号。
2. 在 EmEditor 中 Ctrl+H 调出 Replace 对话框,在 Find 中输入$,
在 Replace With 中输入",然后优雅的点击 Replace Al l,我们就每一行
李树花开,风中摇曳!
-3-
的结尾添加了双引号。
啊?为什么在我的机器上不好使呢?呵呵,再次提醒,别忘选中 Replace
对话框中的 Use Regular Expressions 哦。
看到这里,如果你有这样的疑问,我们能不能一次搞定呢? 如果你有这样
的想法,你终将成大器。事实上确实可以而且也非常简单,试一试下面这个表达
式吧:
^|$
竖线代表或的意思,所以上面的表达式的意思是把行头或行尾替换为双引号。
值得注意的是^和$匹配的是一个位置,也就是行首和行尾,并不匹配具体的
字符。正则表达式的元字符一般有两类,一类匹配具体字符,一类匹配位置。别
着急,你很快就会学会其他更强大的匹配位置的元字符。
恭喜你,你又学会了三个元字符。
元字符
名称
匹配对象
.
点号(dot)
单个任意字符
^
脱字符(caret)
行的起始位置
$
美元符(dollar)
行的结束位置
|
竖线(bar)
匹配分割两边的任意一个表达式
最后大家猜一猜下面的正则表达式是什么意思呢? let me know your
idea.
^$
四.字符组
我的英语很差,记性又不好,总是搞混 then 和 than,当我写完一篇英语
文章,我想搜索一下这两个单词,看看有没有误用的情况,怎么办?虽然到目前
为止你只学会了几个正则表达式元字符,但就解决这个问题来说已经足够了,在
继续之前,停下来好好想想该用什么表达式来解决这个问题呢?
在 EmEditor 中 Ctrl+F 调 出 Find 对 话 框 , 在 Find 中 输 入
then|than,然后点击 Find Down 就 OK 了。恭喜你,你已经用正则表达式解
决了你的第一个问题,这是一个了不起的进步,学会正则表达式很容易,但想灵
活应用是非常难的。你已经有了很好的开始。
事实上,我们还有其他办法解决这个问题,试一试下面这个表达式:
th[ae]n
是不是有异曲同工之妙啊。其中的方括号在正在表达式中是一个元字符,它
表示匹配若干字符之一,所以上面表达式的意思是匹配 t,然后是 h,然后是 a
或 e,然后是 n。怎么样?还好理解吧。
剩余13页未读,继续阅读
XiZi
- 粉丝: 59
- 资源: 325
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0