zoukankan      html  css  js  c++  java
  • 正则式高人谈解答正则式的心得


    条件1: 长度为14个字符
    条件2: 其中任意9个位置为数字,并且数字只能是(0,1,3)
    条件3: 其余的位置全部为"-"符号

    ------------------------------------------ 求一个正则表达式

     答案为:^(?!(.*?-){6,})(?!(.*?\d){10,})[013-]{14}$

    以下是高人提出的解答思路,本人是受益匪浅,同时也贴出来方便大家学习,共同进步。

    首先是正则问题的需求:
    1、目的
    2、规律或规则
    3、应用环境

    当我看到一个正则问题的时候,我希望看到的是一个以上三点都明确的问题
    目的:希望用正则来做什么?验证规则,提取,替换,分割等等。
    规律或规则:符合什么样的规律,或者是应遵守什么样的规则。
    应用环境:正则用于.NET程序中,还是验证控件或javascript中。
    另外就是一些细节的描述,比如提取是提取一条,还是同时提取多条等等。这方面当然是越详细越好,有利于问题的尽快解决。


    接下来谈一谈楼主这个问题
    首先,可以看出这需要的是一个验证规则的正则表达式。所以通常情况下,前面的“^”和后面的“$”是必不可少的。
    接着是内容,字符固定(0、1、3、-)之一,位数固定,14位,那么基本的正则可以写出
    ^[013-]{14}$

    现在还剩下两个需求:9个数字,5个-,但位置不固定。

    还有一点是楼主没有明确的,就是应用环境,如果是在.NET程序中,尽可以用各种方法来实现,甚至走一个极端,用穷举法列出各种可能,然后用“|”或的关系组成一个正则,但那仅仅是一个极端而已,不通用,也无扩展性可言,再就是如果位数多一些,会累死的^o^

    既然不能一一列举可能性,就要把它作为条件来写这个正则,可以用作条件的,就是正反向预搜索了
    (?<=Exp)、(?<!Exp)、(?=Exp)、(?!Exp)

    考虑到通用性和扩展性,放弃使用前三个,以上四个,.NET都支持,但是前两个js中不支持,第三个js虽然支持,但是并不稳定,所以弃用。

    那么现在就只是使用(?!Exp)做为条件了,思路确定,接下来是实现,至于(?!Exp)的详细说明,参考一下相关教程吧,这里不做说明
    (?!(.*?-){6,})
    (?!(.*?\d){10,})
    前一个限制“-”字符不能超过5个,后一个限制数字不能超过10个,再加上后面的{14}把字符数限制在14位,三个条件加起来,那就是9个数字,5个-,总数为14个^o^

    分析过程是正向思维,最后的实现可以算是逆向思维,至于怎么想到,呵呵,或许可以算做是一点经验吧。


  • 相关阅读:
    delphi JPG图片 旋转 切边 缩放
    CXGrid TcxButtonEdit 信息获取 TcxButtonEditProperties取得TcxGridDBTableView
    firemonkey EDit 改变颜色
    firemonkey ListView DynamicAppearance
    delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法
    cxGrid_Q31584 cxgrid 拖放移动记录
    delphi XE Datasnap SERVER 在windows 7 下为服务添加描述信息
    delphi 数组复制利用CopyMemory 最为完美
    delphi强制WebBrowser控件使用指定版本显示网页
    iOS从零开始学习直播之音频2.后台播放和在线播放
  • 原文地址:https://www.cnblogs.com/symbol441/p/897250.html
Copyright © 2011-2022 走看看