Archive

Posts Tagged ‘regex’

正则表达式初试

September 9th, 2007 yaker No comments

首先推荐一个正则表达式学习资源
英文版:http://www.regexlab.com/en/regref.htm
中文版:http://www.regexlab.com/zh/regref.htm

官方网站上还有C++的正则表达式库(免费),以及在线的正则表达式查找和替换工具(免费),还有正则表达式调试工具.
因为最近在编辑WTL教程需要用到正则表达式,就学习了一下.说实话,这是第一次正式使用稍高级的正则表达式功能.其实你在搜索的时候你就在用正则表达式,只是那是最基本的,通常是完全匹配,如果用了”*”或者”?”就是通配符匹配,正则表达式拥有更强的描述能力.
举个例子来说,我发布的WTL教程的原制作者是orbit,我样式改成了CodeProject风格.orbit的代码里有很多<font color=”..></font>这样的标签,我想改为全部用css描述,所以必须去掉所有标题的font标签.于是我面临以下任务:把所有源代码(400k左右)里的类似如下的代码:
<H3><A name=atltemplates></A><font color=”#FFFF66″>ATL-style 模板</font></H3>
替换成
<H3><A name=atltemplates></A>ATL-style 模板</H3>

全部手动处理工作量太大,像visual studio,notepad++都是支持正则表达式查找的,我最后使用的是regexLab的在线替换工具.上午学习了一下之后做了一个正则表达式替换解决了这个问题
查找:
(<font color=”#FFFF66″>)(.+)(</font>)(</[hH][23]>)
替换为:
$2$4
查找的内容分了四个括号,匹配后的内容便分别为$1,$2,$3,$4
第一个括号内的内容是完全匹配的,匹配<font color=”#FFFF66″>
第二个括号的内容是:一直向后匹配直到遇到匹配第三个括号的内容
第三个括号的内容是:完全匹配</font>
第四个括号的内容是:匹配</h2>或</h3>,不区分大小写
替换的内容表示,去掉匹配后的第一和第三部分(font标签)

P.S.
1.notepad++的正则表达式替换要用”\2\4″这样的形式
2.Visual Studio的查找规则略有不同,它把”<”和”>”当作特殊字符来看待
3.boost也有相应的正则表达式库

Categories: programming Tags: