首页 > 正则式高人谈解答正则式的心得

正则式高人谈解答正则式的心得



条件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)、(?

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

那么现在就只是使用(?!Exp)做为条件了,思路确定,接下来是实现,至于(?!Exp)的详细说明,参考一下相关教程吧,这里不做说明

(?!(.*?-){6,})

(?!(.*?d){10,})

前一个限制“-”字符不能超过5个,后一个限制数字不能超过10个,再加上后面的{14}把字符数限制在14位,三个条件加起来,那就是9个数字,5个-,总数为14个^o^

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





转载于:https://www.cnblogs.com/symbol441/archive/2007/09/18/897250.html

更多相关:

  • 原文出处: 韩昊    1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事   谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。   转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。 我保证这篇文章...

  • 原文出处: 韩昊   我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维...

  • 很多Linux高手都喜欢使用screen命令,screen命令可以使你轻松地使用一个终端控制其他终端。尽管screen本身是一个非常有用的工具,byobu作为screen的增强版本,比screen更加好用而且美观,并且提供有用的信息和快捷的热键。 想象一下这样一个场景:你通过Secure Shell(ssh)链接到一个服务器,并...

  • NarrowbandPrimary Synchronization Signal时域位置每1个SFN存在一个NPSSSFNSubframeSymbol长度每个SFN5最后11个symbol11个symbols频域位置NB-IOT下行带宽固定180kHz,一个PRB,12个子载波。...

  •  [h1]反斜杠只能够阻止一个字符  [h2]位于键盘的左上角,和~公用一个键。...

  • 一、前提条件...

  • 文章目录1. 循环语句2. 条件语句2.1 if...else 条件2.2 switch 条件...

  • 相信做android应用开发的朋友对intent组件都已经是相当熟悉了,这里鄙人总结一下intent的妙用,希望对大家有帮助。 intent妙用之列出所有已安装的应用程序列表 装载:http://blog.csdn.net/android_tutor/article/details/5724634 这篇文章写的很好,既说明了方法,也...