当前位置: 首页 > 编程日记 > 正文

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


条件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^

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


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

相关文章:

数据结构与算法--线性表(顺序表)

本图文主要掌握以下问题&#xff1a; 1. 什么是线性表&#xff0c;线性表有哪些操作&#xff1f; 2. 如何利用顺序结构实现线性表&#xff1f;

Myeclipse在启动tomcat的时候的模式改变

在Myeclipse中&#xff0c; windows->preferences->Myeclipse->Servers->Tomcat 然后找到你的相应的Tomcat服务器的版本 当选择Debug mode的时候&#xff0c;当启动tomcat的时候&#xff0c;会进入debug视图 当选择Run mode的时候&#xff0c;启动tomcat的时候&a…

Request.ServerVariables参数集

Request.ServerVariables("Url") 返回服务器地址 Request.ServerVariables("Path_Info") 客户端提供的路径信息 Request.ServerVariables("Appl_Physical_Path") 与应用程序元数据库路径相应的物理路径 Request.ServerVariables("Path_T…

Linux (x86) Exploit 开发系列教程之十一 Off-By-One 漏洞(基于堆)

Off-By-One 漏洞&#xff08;基于堆&#xff09; 译者&#xff1a;飞龙 原文&#xff1a;Off-By-One Vulnerability (Heap Based) 预备条件&#xff1a; Off-By-One 漏洞&#xff08;基于栈&#xff09;理解 glibc mallocVM 配置&#xff1a;Fedora 20&#xff08;x86&#xff…

利用链式存储结构实现线性表

本图文主要介绍了如何利用链式存储结构实现线性表。

自己用的快捷键

win7中 1. Ctrl Shift N —— 创建一个新的文件夹你需要在文件夹窗口中按 Ctrl Shift N 才行&#xff0c;在 Chrome 中是打开隐身窗口的快捷键。2.Win 上/下/左/右 —— 移动当前激活窗口其中&#xff0c;Win 左/右 为移动窗口到屏幕两边&#xff0c;占半屏&#xff0c;Wi…

3月到9月之9月到12月

看看自己这个博客&#xff0c;偶然发现上次的到现在又是半年过去了&#xff0c;这中间发生的太多&#xff0c;可能我天生不爱写东西&#xff0c;呵半年留一次脚印&#xff0c;真不知道我的博客对于博客园来讲算不算资源浪费&#xff01;常看别人的&#xff0c;但自己没写过&…

Java动态代理机制

在Java的动态代理机制中&#xff0c;有两个重要的类。一个是InvocationHandler&#xff0c;另一个是Proxy。InvocationHandler&#xff1a;每一个动态代理类都必须要实现InvocationHandler接口&#xff0c;并且每个代理类的实例都关联到了一个handler&#xff0c;当我们通过代理…

Matlab与线性代数 -- 魔方矩阵

本图文主要介绍了如何利用Matlab实现魔方矩阵。

springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序

spring mvc处理方法支持如下的返回方式&#xff1a;ModelAndView, Model, ModelMap, Map,View, String, void。下面将对具体的一一进行说明&#xff1a; ModelAndView Java代码 RequestMapping("/show1") public ModelAndView show1(HttpServletRequest request, …

[文摘20070930]人际关系,你有五十五招

第1招 认清人生的意义以及毕生所全力以赴的目标 为什么要这么拼命&#xff1f;因为你必须对得起自己的良知。 想要成为一个人际关系高手&#xff0c;第一步就必须先确认你的价值观&#xff1b;若是你连这个都摸不清楚&#xff0c;就很难去看透人生的意义&#xff0c;更不用说…

数据库抽取,生成CSV文件导出,CSVUtils工具类

2019独角兽企业重金招聘Python工程师标准>>> 开发背景&#xff1a; 最近一直在忙一个任务调度系统&#xff0c;需求一直没定下来&#xff0c;需求一直变更&#xff0c;调度一直改&#xff0c;往往复复。。。 等这波忙完了可以写一下关于BI这边调度任务的相关问题&am…

Matlab与线性代数 -- Pascal矩阵

本文主要介绍利用Matlab实现pascal矩阵的相关知识。

java加密算法

java加密算法 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。 BASE64编码算法不算是真正的加密算法。 MD5、SHA、HMAC这三种加密算法&#xff0c;可谓是非可逆加密&#xff0c;就是不可解密的加密方法&#xff0c;我们称之为单向加密算法。我们通常只把他们作为加密的基…

在多台FMS服务器之间共享流

FMS有一个非常重要的功能,那就是可以在多台服务器之间共享流. 利用这一功能,我们可以把源服务器上的流分发到其它的服务器,这些获得流的服务器同样可以作为新的源服务器使用.这个功能有点象FMS集群. 我们都知道,利用WMP插件可以获取网上的流媒体地址制作网络电视台,其实利用Fla…

linux实现nat转发和内部端口映射

路由机 eth0:114.114.114.114(公网ip) eth1:192.168.1.1(内网ip) pc1 eth0:192.168.1.2(内网ip) eth1(拨号ip) pc2 eth0:192.168.1.3(内网ip) eth1(拨号ip) 1.配置路由机网卡信息 vim /etc/sysconfig/network-scripts/ifcfg-eth1 TYPEEthernet BOOTPROTOstati…

15级团队学习成果汇报 -- 利用C#语言实现展览厅

本图文主要是15级团队学习成果的汇报“ 利用C#语言实现展览厅”。

我所理解的Spring AOP的基本概念

Spring AOP中的概念晦涩难懂&#xff0c;读官方文档更是像读天书&#xff0c;看了很多例子后&#xff0c;写一些自己理解的一些spring的概念。要理解面向切面编程&#xff0c;要首先理解代理模式和动态代理模式。 假设一个OA系统中的一个功能是查看考勤信息&#xff0c;那么我…

你需要的大概不是 enumerated

作者&#xff1a;KHANLOU&#xff0c;原文链接&#xff0c;原文日期&#xff1a;2017-03-28译者&#xff1a;四娘&#xff1b;校对&#xff1a;Cwift&#xff1b;定稿&#xff1a;CMBSwift 标准库里最容易被滥用的就是 Sequence 的 enumerated() 函数。这个函数会返回一个新的序…

Matlab与线性代数 -- 正态分布的随机矩阵

本图文介绍了如何利用Matlab实现正态分布的随机矩阵。

修改maven本地仓库的位置及疑惑

maven的默认仓库在~/.m2/repository下&#xff0c;这个是在c盘下&#xff0c;很多系统程序都在c盘&#xff0c;而且c盘的空间有时候不够大&#xff0c;所以经常要修改本地repository的位置&#xff0c;我做的修改如下&#xff1a; 在D盘建立一个repository&#xff1a;D:\mave…

值得FS去的英雄副本

1) 奥金尼地穴腰带 18耐23智19精 22法爆28法伤2) 塞泰克大厅法杖 40耐42智 37法爆168法伤3) 暗影迷宫腰带 31耐27智 17法爆34法伤4) 奴隶围栏饰品 37法伤一定几率使施法加速320,持续6秒5) 盘牙洞穴魔杖 10智 11法爆20法伤转载于:https://www.cnblogs.com/Evanescence/archive/2…

利用C#语言实现小闹钟

本图文主要是15级团队学习成果的汇报“ 利用C#语言实现小闹钟”。

Windows和linux双系统——改动默认启动顺序

电脑上装了Windows 7和Ubantu双系统&#xff0c;因为Linux系统用的次数比較少而且还是默认的启动项对此非常不能容忍&#xff0c;因此得改动Windows为默认的启动项。 因为电脑上的系统引导程序是GRUB&#xff0c;因此改动当然也就落到Linux系统上啦。改动/boot/grub/grub.cfg该…

ThreadLocal的使用方法

ThreadLocal的含义是Thread Local Variable&#xff0c;它可以声明一个字段&#xff0c;使得不同的线程访问这个字段时&#xff0c;获取的都是不同的副本&#xff0c;互不影响。 ThreadLocal的作用和在每个Thread类声明一个字段相同&#xff0c;那么什么时候使用它呢&#xff1…

如何实现对象交互

在本篇随笔中&#xff0c;我们学习下什么是对象选择&#xff0c;投影和反投影是如何工作的&#xff0c;怎样使用Three.js构建可使用鼠标和对象交互的应用。例如当鼠标移到对象&#xff0c;对象变成红色&#xff0c;鼠标移走&#xff0c;对象又恢复原来的颜色。 本篇随笔的源代码…

Matlab与线性代数 -- 矩阵的大小

本图文介绍了如何利用Matlab求矩阵的大小。

最近做了一个小小的系统,收获挺大的....我想总结一下

首先我要感谢老许,是他给了我这次机会.以后我会把我的经验一点一点总结出来....为那些在编程之路上的迷茫者找到方向活着让人兴奋...总觉的应该去做点什么做工程开发吧----我的老师阿温说过一句话让我记忆尤新:"坚持成就传奇".我想用他去勉力每一个在人生路上奋斗的人…

Hibernate和iBATIS 优缺点比较

选择Hibernate还是iBATIS都有它的道理&#xff1a;Hibernate的特点&#xff1a;Hibernate功能强大&#xff0c;数据库无关性好&#xff0c;O/R映射能力强&#xff0c;如果你对Hibernate相当精通&#xff0c;而且对Hibernate进行了适当的封装&#xff0c;那么你的项目整个持久层…

Matlab与线性代数 -- 矩阵的秩

本图文详细介绍了利用Matlab求矩阵秩的方法。