zoukankan      html  css  js  c++  java
  • 常见正则表达式分析练习

    给10000000000三位打点 变成 10.000.000.000
     
    a 梳理思路
    要先明白的是,我们将要转换成的数字格式是这样:从个位往左数起,每三位前插入一个千位分隔符,,即可以想象成我们要把每三位数字前面的那个空""匹配出来,并替换成千位分隔符,。每个千位分隔符后面的数字个数是3个或3的倍数个。
     
    b 代码书写
    1、我们要找的是那些后面紧跟着三位数字的空 “”
    这里面我们应用到了正向预查,a(?=n)即匹配出表达式n前面的内容a,因为我们要匹配的是空,即不用填写a的内容。
    因为需要从右往左匹配,所以表示结尾的$是必须要有的。三位数字用d{3}来表示,由于我们不知道究竟有多少组这样的三位数字,所以需要在d{3}后面加上+,来表示匹配任何包含至少一组三位数字的字符串。至目前,/(d{3})+$/g表示作为结尾的3个或3的倍数个数字。
     
    2、下面对确定匹配位置的空进行替换,替换字符串逗号‘,’
     
    3、会出现的问题
    现在是八位数字,如果再加一个0,凑够九位数呢,它可是3的倍数,我们试验一下:
    这串数字最前面也被添加了一个, 。因为总位数为九,为三的倍数,所以在数字最前面也进行了空格匹配。
    那么怎么解决呢?我们对代码进行一下完善,在d前面加一个非单词边界B,用来表示所匹配的这个空后面不能是一个单词边界,这样就可以把最前面的这个,去掉了。
     
    最终的代码如下
     
    总结:
    g 是表示全局匹配的修饰符,全局匹配指查找所有匹配而非在找到第一个匹配后停止。
    $ 是表示结尾的量词,如n$,匹配的是任何以n为结尾的字符串。
    d 是查找数字的元字符。
    n{X} 是匹配包含 X 个 n 的序列的字符串的量词。
    n+ 是匹配任何包含至少一个 n 的字符串的量词。
    ?=n 正向预查,用于匹配任何其后紧接指定字符串 n 的字符串。
    match() String对象的方法,作用是找到一个或多个正则表达式的匹配。
    replace() String对象的方法,作用是替换与正则表达式匹配的子串。
    B 是表示匹配非单词边界的元字符,与其互为补集的元字符是,表示匹配单词边界。
     
     
  • 相关阅读:
    反射学习系列3反射实例应用
    (转)华为牛人在华为工作十年的感悟!
    利用日志记录所有LINQ的增,删,改解决方案
    qt5摄像头
    opencvcartToPolar笛卡尔坐标转极坐标
    逆矩阵
    方阵的行列式
    qt5右键菜单
    矩阵的转置
    opencvpyrDown降采样和pyrUp升采样
  • 原文地址:https://www.cnblogs.com/pandawind/p/9935468.html
Copyright © 2011-2022 走看看