标签:
杂谈 |
前接2:
正则表达式:搜索与替换要啥给啥
先来解释一下什么叫正则表达式:相信你一定使用过Windows或Dos下用于文件查找的通配符,也就是*和?。如果你想查找某个目录下的所有的 Word文档的话,你很自然地会搜索”*.doc”。在这里,”*”会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求。当然,代价就是更复杂,例如搜索doc为扩名的文件,正则表达式为”.*\.doc”。别看它复杂了很多,但正则表达式几乎能满足你的一切搜索需求。比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号”-”,最后是7或 8位数字的字符串(像010-12345678或0757-87654321)。
在UltraEdit 中,正则表达式被很好地支持,目前的版本中一共支持三种,UltraEdit 风格正则表达式、Unix风格正则表达式和Perl兼容正则表达式,本文介绍Perl兼容正则表达式,这是一条被广泛使用的正则表达式,绝大多数的编程语言都支持这种表达式。
要使用Perl兼容正则表达式,需要在UltraEdit 中做一下设置。点击菜单 高级》配置 ,出现下图的对话框,在左侧选中”正则表达式引擎”,右边勾选”Perl兼容正则表达式”。
http://img.bimg.126.net/photo/kn81Aeu8W9pSrJ5KU4CKow==/5775303572150437733.jpg图11
l 正则表达式语法:
Perl引擎:
http://img.bimg.126.net/photo/9S8OEnnqw0yRQTjImPArLA==/5775303572150437734.jpg图12
字符转义
如果你想查找元字符本身的话,需要使用”\”来转意。例如”.”代表除换行以外的任意字符,如果你想搜索”.”这个字符的话,需要这样使用”\.”。
重复
语法
*
+
?
{n}
{n,}
{n,m}
字符集
若要匹配adcde个字符中的任意一个,可以表示成[adcde]。
再如[0-9]表示0到9之间的任意一个数字,它的含义和元字符中的\d实际上是一样的。
反意
如果要匹配非a则[^a],除abcde五个字母之外的表示成[^adcde].
UltraEdit 中的正则表达式查找
我们以一个html为例,希望搜索一个<ul> Html标记的内容。首先要明确要搜索的字符串的特征:以<ul开头ul>结尾,中间包含任意字符(包括换行),于是表达式可以写成<ul[\S\s]*?ul>。在这里[\S\s]表示空白和非空白(即所有字符),随后的*表示任意多个,?表示非贪婪搜索。
确定表达式后按下键盘上的Ctrl+F 在弹出的查找对话框中输入表达式,并且勾选”正则表达式”,点”查找下一个”即可看到搜索的效果。
UltraEdit 中的正则表达式替换
在UltraEdit 中正则表达式不但可以用于查询还能用于替换,这里介绍一种复杂的替换。以下图所示的一个文件为例,文中有很多日期,都是这样的格式dd/mm/yyyy,我们希望把他替换成yyyy-mm-dd的格式。
既然是替换,那么必需先查到目标串,用\d表示数据,月和日都一位或两位数据组成,正则表达式表示为\d{1,2},年份都四个数字表示为 \d{4},加上中间的分隔符/,整个日期串可以表示为\d{1,2}/\d{1,2}/\d{4}。我们替换的目标是要把最后的年份放到第一位去,因此还需要这个搜索能返回各个部分的值,在Perl正则表达式中用()可以返回搜索串中的值,并用$1表示第一个括号中的值,因此我们加上3个括号表达式变成 (\d{1,2})/(\d{1,2})/(\d{4}),那么$1表于日,$2表示月,$3表示年。说到这里要达到我们的目标就很简单了。
按下键盘上的Ctrl+R 调出替换对话框,查找内容为(\d{1,2})/(\d{1,2})/(\d{4}),替换为$3-$2-$1,记得勾上”正则表达式”。
填好后”全部替换”。
常用的正则表达
行首空格: ^\s+
行尾空格:\s+$
IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
正整数: ^[1-9]\d*$
负整数: ^-[1-9]\d*$