使用正则表达式匹配数字范围
因为正则表达式主要是处理文本而不是数字,所以要匹配一个给定的范围的数字需要额外注意,你不能简单的写[0-255]来匹配一个数字范围0-255。尽管这是一个正确的表达式,但是它匹配的内容却完全和你想的不一样。[0-255]是一个字符类包含三个元素:字符范围0-2,字符5和字符5(再次)。这个字符类匹配的是单个字符:0,1,2或者5,像[0125]一样。
因为正则表达式作用于文本,一个正则表达式引擎(内部实现机制)对待0作为单个字符,255作为三个字符。为了匹配从0-255的所有的字符,我们需要一个正则表达式匹配一个字符到三个字符的范围。
[0-9]或者\d匹配单个数字0到9,[1-9][0-9]或者[\d&&[^0]][\d]匹配从10-99的两位数字。这些比较容易实现。匹配三个字符有些复杂,因为我们需要排除256-999的数字,使用|(或)结构,这样的话1[0-9]{2}或者1\d{2}表示100-199的数字,2[0-4][0-9]表示的200-249的数字,25[0-5]表示250-255的数字,所以综合起来的表示方式:1[0-9][0-9]或者1[0-9]{2}|2[0-4][0-9]|25[0-5]。
像你看到的一样,需要将数字范围按范围分割,每一个范围允许对每个数字相同的变化,在这个例子中有3个数字范围,数字以1开始的允许10个数字对于剩下的两位,然而,数字以2开始的数字剩余两位就受到了限制.
把上面的放在一起,使用间隔(alternation)我们可以得到[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5],这个匹配了我们想要得数字,但是要注意了:正则表达式搜索通常允许部分匹配,所以这个正则表达式可以匹配123 在12345, 对此有两种解决方案.
如果你在一分较大的文档中或者输入串中搜索这些数字,使用词边界来要求一个非字母字符在其以前或者其后有有效的匹配.表达式变成\b[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\b.因为分割操作是所有操作中优先权最低的,而圆括号需要将其组合到一起.这样的话,正则表达式引擎将匹配第一个词边界内容,然后再匹配其分割操作中的内容,接着匹配第二个词边界的内容.正则表达式引擎考虑到所有的字母数字字符,还有下划线作为\w字符.
如果你是用证则表达式来验证输入,你将很可能想要检查整个输入是有效的数字组成. 使用锚(anchors)代替词边界^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$.
下面是一些常用的数字范围的匹配你可能用得到:
* 000..255: ^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$
* 0 or 000..255: ^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$
* 0 or 000..127: ^(0?[0-9]?[0-9]|1[0-1][0-9]|12[0-7])$
* 0..999: ^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$
* 000..999: ^[0-9]{3}$
* 0 or 000..999: ^[0-9]{1,3}$
* 1..999: ^([1-9]|[1-9][0-9]|[1-9][0-9][0-9])$
* 001..999: ^(00[1-9]|0[1-9][0-9]|[1-9][0-9][0-9])$
* 1 or 001..999: ^(0{0,2}[1-9]|0?[1-9][0-9]|[1-9][0-9][0-9])$
* 0 or 00..59: ^[0-5]?[0-9]$
* 0 or 000..366: ^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-6])$
分享到:
相关推荐
正则表达式(Regular Expression,简称regex)是Java编程语言中的一个重要工具,用于处理字符串模式匹配和搜索替换。在Java中,正则表达式通过java.util.regex包中的类和接口来实现,例如Pattern和Matcher。本篇文章...
在C/C++编程环境中,正则表达式(Regex或Regular Expression)是一种强大的文本处理工具,用于模式匹配、字符串查找、替换等操作。由于C++标准库并没有内置完整的正则表达式支持,直到C++11标准引入了`<regex>`库,...
GNU Regex 程式库是 GNU 发展,提供操作比对 Regular Expression 文字字串的程式库,也就是使用 GNU Regex 程式库,可以作到以下的功能: 比对一字串是否完全与 Regular Expression 相幅合。 在一字串中寻找与 ...
Regular expression 具有可以表达出难以描述、複杂、但是却有特殊规则的字串的功能,所以许多的 UNIX 工具程式都有支援 Regular expression 的功能。例如 ex 、 vi 、 sed 、 awk 、 grep 、 emacs 等等都有支援。...
正则表达式(Regular Expression)是一种强大的文本处理工具,它能用来进行字符串匹配、查找、替换等操作。在编程语言中,正则表达式被广泛应用于数据验证、文本解析、日志分析等领域。本资料全集是针对正则表达式...
It can show a graphical representation of the regular expression's parse tree. It can single-step through the matching process as performed by the regex engine. Everything happens in "real time", i....
正则表达式:正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本匹配工具,在编程和文本处理中非常有用。它可以用于搜索、编辑、或操纵文本。几乎所有现代编程语言都支持正则表达式的使用,...
**正则表达式**(Regular Expression,简称Regex或RegExp)是一种强大的文本处理工具,主要用于模式匹配,即查找文本中符合某种特定规则的字符串。正则表达式不仅仅是一个简单的查找工具,它还能够进行复杂的字符串...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据提取、搜索替换等场景。在 Vim 编辑器中,正则表达式功能强大,能够帮助程序员和开发者在大型项目中高效地进行...
根据提供的文件信息,本书《Regular Expression Recipes for Windows Developers: A Problem-Solution Approach》是一本针对Windows开发者关于正则表达式的实用指南。本书作者是Nathan A. Good,并于2005年出版。...
正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串中字符组合的模式。它广泛应用于文本处理、数据验证、搜索与替换等领域。 正则表达式的基本组成: 普通字符:直接匹配的字符,如 a, b, 1, # 等。...
regular expression processor, 将正则表达式转换成NFA,接着讲NFA转换成DFA,并输出DFA。同时可以生成DOT文件,以提供给graphviz生成图形界面。
正则表达式(Regular Expression),简称为regex,是计算机科学中用于处理字符串的强大工具。它通过一种模式匹配的方式来搜索、替换或提取文本,广泛应用于文本编辑器、编程语言、搜索引擎以及各种数据处理任务中。...
在"A Regular Expression Wrapper"项目中,开发者可能已经创建了一个包装器类,将`ATL::CRegEx`的功能进行了封装,使其更容易在应用程序中使用。包装器类可能提供了更加直观的方法,隐藏了底层的COM细节,并且可能...
正则表达式(Regular Expression,简称regex)是用于匹配字符串模式的一种强大工具,广泛应用于文本处理、数据验证、搜索和替换等场景。在JavaScript和Java等编程语言中,正则表达式扮演着至关重要的角色。 ...
Boost.Regex库是基于Philip Hazel的PCRE(Perl Compatible Regular Expressions)库实现的,提供了高效且功能丰富的正则表达式操作。`<boost/regex.hpp>`是这个库的核心头文件,包含了所有必要的定义和声明,使得...
正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,广泛应用于数据验证、搜索与替换、文本分析等多个领域。在IT行业中,熟练掌握正则表达式能够极大地提升处理字符串问题的效率。...
此外,Hoa旨在成为工业界和研究界...分析正则表达式我们需要来解析,解析并产生以下正则表达式的AST: ab(c|d){2,4}e? 。 从而: // 1. Read the grammar.$ grammar = new Hoa \ File \ Read ( 'hoa://Library/Regex
正则表达式(Regular Expression,简称Regex)是编程领域中用于模式匹配和字符串处理的强大工具。在C#中,正则表达式通过System.Text.RegularExpressions命名空间中的Regex类提供支持。这个压缩包文件“regular ...
Python正则表达式,也称为Regular Expression,在编程领域中是一种强大的文本处理工具,它能用于查找、替换或者提取符合特定模式的字符串。Python内置了`re`模块来支持正则表达式操作,使得在Python中使用正则表达式...