楼兰之风...

致力于解放和提高软件开发生产力,欢迎访问 www.ewikisoft.com 填写您的邮件地址,订阅我们的精彩内容:

导航

正则表达式的零宽断言的一个小应用

先给出一个需求:

数据表中有一列存储了一些脏字,比如:

a*b

c*d

e\*f

...

现在想把该字段所有的"*"号替换成"\*",但是如果*号前面已经有了\,则不必替换

 如果你可以用正则表达式很快解决这个问题,可以不必看下面的文字

-------------------

当然解决这个问题有很多方法,现在我们尝试用正则表达式去解决,查阅了很多资料,尤其是这篇文章:正则表达式30分钟入门教程版本:v2.3 (2008-4-13) 作者:deerchao 转载请注明来源

终于解决了这个问题,该文中提到了“零宽断言”的概念 :


表4.常用分组语法
分类 代码/语法 说明
捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读


 “(?<!exp)"的意思是匹配前面不是exp的位置

因此匹配前面不是反斜杠的正则表达式应该这样写:

(?<!\\)\*

解决了这一步,替换也不难了,文章开头的问题也迎刃而解! 有兴趣的朋友可以继续学习

正则表达式30分钟入门教程

正则表达式--零宽断言

posted on 2009-02-06 17:49  lola  阅读(3877)  评论(6编辑  收藏  举报