文章来源正则表达式专题正则表达式介绍及其在EmEditor的应用(更新)
作者
应lyh728之约,也算是对命令行和正则表达式专题的支持,随便写点东西介绍下正则表达式的基础概念.由于本版偏重应用,故只取EmEditor的正则子集来作介绍.Perl和CLR的Regex的内容远比这类编辑器所支持的功能多.
正则表达式实在包含的内容太多,仅仅用一篇文章来涵盖是没可能的了,所以我只是简要的做些介绍和基本的模式应用举例.即使这样也需要多次分章节的来连载了~~~闲话少说,以下正文:
正则表达式,英文Regularexpression,简写Regexes或Regex.
应用概述:提供与预期的搜索结果匹配的确切文本来进行字符串的搜索和替换操作,这种技术不仅仅用于开发领域,更被集成到一些常见的文本扩展编辑器,如UltraEdit,Emeditor等.历史上第一个实用应用程序是Unix中的qed编辑器
举一个简单的类比:我们对DOS中的通配符*和?应该很熟悉,如命令dir*.exe将列出所有后缀名为exe的文件名.正则表达式提供的方法与其类似,而且远比通配符强大的多.
从某种意义上说,正则表达式是一种语言,通过及其简短的一行代码即可以高效,精确的描述要匹配的复杂文本,当然,它最大的优点也是他最大的缺点:语法复杂,创建困难.(熟悉之后就可以忽略后半句了)
主要应用:
既然发在软件使用板,正则表达式的开发中的应用就不介绍了,以下仅以EmEditor中的正则表达式来作介绍:
1.启用正则表达式
菜单:Search-Find(Replace)-选中UseRegularExpressions
2.Emeditor正则语法
正则表达式是普通字符和元字符组合的一种模式.它的结构与算术表达式的结构类似,各种元字符和运算符可以将小的表达式组合起来创建大的表达式通过在一对分隔符之间放置表达式模式的各种组件就可以构建正则表达式
2.1普通字符
普通字符是指除了.,*,?,+,(,),{,},[","],^,$和\这些特殊字符之外的所有其他字符.而这些特殊字符也可以通过前面加上\前缀而变为普通字符.比如,搜索CCF即为在文本中匹配所有的CCF字符串,搜索\[CCF\]则是在文本中匹配所有的[CCF]字符串.
简而言之,普通字符即为只匹配自身的字符.
2.2元字符
元字符不匹配其自身它用特殊方式来解析从而实现更多的逻辑功能正则表达式通过元字符在模式中包含选择和循环
2.2.1特殊字符
2.2.2控制字符
2.2.3换码字符
2.2.4转义字符串
表示为[:classname:],如[[:space:]]表示所有的空格字符
2.2.5定位字符
定位字符可以把正则表达式固定到行首或行尾在Perl正则全集中还能使正则表达式出现在一个单词内在一个单词的开头或者一个单词的结尾,emeditor只是一个子集,不包含这个功能
3.分组捕获和替换
分组通常用来捕获特定模式的一组文本,并用与之后的替换操作,这也就是将分组和替换结合起来讲解的原因.
最基本的分组构造方式就是(),在左右括号中括起来的部分就是一个分组在正则全集中还有如(?name)的命名分组方式这种方式组合了模式在就是对分组的部分进行了命名这样就可以通过该组的命名来获取信息,但这种方式在emeditor中不被支持.以下分别来介绍各种不同的分组:
严格的说,后面两个分组不能称之为分组,他们只是模式声明,他们不能成为匹配结果,也不能被捕获.在正则全集中,还有反向声明分组(?),在emeditor中不被支持.
说到括号的功能,本来正则中的一个重要指令-条件指令和分组内联设定是不得不说的,可惜的是emeditor也同样不支持~~~~
在前面的例子中一直提到匹配之后的操作,而这个进一步的操作最常见的就是替换.先继续上面的例子:
源文本:代码:
sitestatus-onlinemembers:65,onlineguests:12
使用搜索正则表达式:代码:
(members|guests)
和替换正则表达式:代码:
ccf-\1
匹配模式结果如下:代码:
membersguests
替换后的文本为:代码:
sitestatus-onlineccf-members:65,onlineccf-guests:12
其中members和guests在两次匹配中被捕捉,在随后被引用,并添加ccf-前缀后替换源文本中的匹配字符.
在匹配模式中的分组匹配结果将按前后顺序被正则引擎分别赋予内部组号,在替换操作中就可以用\加上这个组号来引用相应的匹配结果.继续上例:
使用搜索正则表达式:代码:
(members|guests):(\d{2})
和替换正则表达式:代码:
ccf-\1=\2
匹配模式结果如下:代码:
members:65guests:12
替换后的文本为:代码:
sitestatus-onlineccf-members=65,onlineccf-guests=12
在emeditor的正则子集中增加了一个特殊的引用:\0,\0将引用上次的匹配结果,继续把:
使用搜索正则表达式:代码:
\d{2}
和替换正则表达式:代码:
*\0*
匹配模式结果如下:代码:
6512
替换后的文本为:代码:
sitestatus-onlineccf-members:*65*,onlineccf-guests:*12*
作为一个编辑软件,emeditor的正则子集中增加了一些替换修饰符:
editor,
|Postedin:
没有评论:
发表评论