zoukankan      html  css  js  c++  java
  • 正则表达式的零宽断言的一个小应用

    先给出一个需求:

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

    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分钟入门教程

    正则表达式--零宽断言

  • 相关阅读:
    算术入门之加减乘除
    scanf的返回值
    Flutter 开发环境配置
    DbContextOptionsBuilder
    MarkDown 的简单用法
    C# 多线程安全集合类
    .NET Core 中使用 MemoryCache 缓存
    JWT
    什么是跨域?跨域解决方法
    .Net Core 中配置的高级用法
  • 原文地址:https://www.cnblogs.com/xiehuiqi220/p/1385481.html
Copyright © 2011-2022 走看看