`
bruce198
  • 浏览: 236254 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

阅读更多
条件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^

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




转自:http://www.cnblogs.com/symbol441/archive/2007/09/18/897250.html
分享到:
评论

相关推荐

    正则式验证工具

    正则式(Regular Expression,简称regex)是一种模式匹配语言,用于在文本中查找、替换或提取符合特定规则的字符串。在软件开发过程中,正则表达式是不可或缺的一部分,尤其是在处理数据验证、搜索和数据提取等任务...

    正则式工具(自动生成正则表达式)

    正则式,全称为“正则表达式”,是编程领域中一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过一系列特定的字符和语法构建模式,可以高效地处理各种复杂的文本匹配任务。在软件开发、数据处理、...

    DFA.rar_DFA_DFA串_定义字符串dfa_正则式_正则式DFA

    本实验是基于DFA的简单编译器设计,通过将给定的正则式转化为DFA,然后对输入字符串进行判断,看其是否属于该正则式定义的语言。 正则式,是描述字符集的一种简洁方式,它可以表示出一系列可能的字符串。在本例中,...

    正则表达式 到 NFA

    这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦. 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式...

    java正则式学习

    Java正则表达式是Java语言中用于处理字符串的强大工具,源于早期对神经网络模型的研究,由数学家Stephen Kleene提出并应用于Ken Thompson的计算搜索算法,最终在Unix的qed编辑器中得到应用,并逐渐成为现代文本编辑...

    正则式到有限自动机的自动转换 课程设计 好用

    这篇课程设计报告主要探讨了如何将正则式转换为有限自动机,特别是在编译原理的背景下。正则式是描述字符集的一种数学表达方式,广泛应用于文本处理、模式匹配等领域。而有限自动机(Finite Automaton)是一种计算...

    正则表示式工具

    正则表达式工具,如提供的"正则表示式工具.exe",是专门用来测试和调试正则表达式的软件。这类工具通常有以下特点: 1. **实时匹配**:输入正则表达式和测试字符串,立即显示匹配结果。 2. **高亮显示**:高亮匹配...

    正则式学习笔记,简明版

    正则式,或称为正则表达式,是用于在文本中进行模式匹配和搜索的强大工具。在编程语言中,如JavaScript,正则式被广泛应用于字符串处理,包括验证输入、提取信息、替换文本等场景。以下是对正则式及其在JavaScript中...

    正则式生成器

    正则式生成器是一款工具软件,旨在帮助用户创建和编辑正则表达式,适用于那些对正则表达式不熟悉或需要快速构建复杂匹配模式的人员。正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,广泛...

    正则表达式学习心得 v1.0

    ### 正则表达式学习心得 v1.0 #### 摘要与目的 本文旨在分享作者在学习正则表达式过程中的心得体验,并重点介绍了几种常见编程语言(Python、C#、PHP)及文本编辑器(Notepad++)中正则表达式的使用技巧。此外,还...

    mtk 字符查找正则式

    对bin文件查找出指定格式字符,采用正则式表达

    正则表达式入门与提高---整理版_VBa_正则式_

    正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换或者提取特定模式。在VBA(Visual Basic for Applications)环境中,正则表达式可以极大地增强你在Excel、Word等Office应用中的数据处理能力。...

    正则达式测器

    "正则达式测器"是一款实用工具,帮助用户在编写正则表达式时实时检查其正确性和有效性。 正则表达式的核心概念包括: 1. **字符类**:例如 `[abc]` 表示匹配 a、b 或 c 中的一个字符。`[^abc]` 表示匹配除了 a、b ...

    java中常用的正则式

    正则表达式 正则表达式 - 教程 正则表达式 - 简介 正则表达式 - 语法 正则表达式 - 元字符 正则表达式 - 运算符优先级 正则表达式 - 匹配规则 正则表达式 - 示例 正则表达式 - 在线工具 正则表达式 – 简介 正则...

    正则式转NFA、NFA转DFA、DFA转MFA(DFA最小化).zip

    包含正则式转NFA、NFA转DFA(NFA确定化)、DFA转MFA(DFA最小化)三个程序,以及对应报告简述类的设计、包含的变量和思路。详细介绍参考:https://blog.csdn.net/newlw/article/details/123116153

    正则式到有穷自动机

    正则式到有穷自动机是计算机科学中的一个重要概念,主要应用于文本匹配、模式识别以及编译原理等领域。正则表达式(Regular Expression)是一种强大的文本处理工具,它使用一种简洁的语法来描述一系列字符串的集合。...

    正则表达式全解及正则表达式学习心得

    正则表达式全解及正则表达式学习心得 正则表达式是字符串模式匹配的强大工具,掌握正则表达式可以让开发者更方便地处理字符串数据。本文将对正则表达式的基本概念、元字符、模式匹配、量词、分组、字符类、边界匹配...

    C#正则表达式使用心得

    本篇文章主要针对C#正则表达式的使用心得和基础知识进行阐述,帮助初学者理解并掌握这一重要工具。 1. 什么是正则表达式 正则表达式是一种特殊语法,用于描述字符串的模式。它可以用来检查字符串是否符合特定格式,...

    正则生成器

    "正则生成器"是专为方便用户创建复杂正则模式的软件或在线工具,它允许用户通过图形化界面或者预设选项来构建所需的正则表达式,无需手动编写复杂的正则语法。 1. 正则表达式基础概念: - 字符集:包括ASCII字符、...

Global site tag (gtag.js) - Google Analytics