使用正则表达式处理浮点数问题
在这个例子中,将要显示给大家呼喝避免初学者使用正则表达式时会犯的错误。举个例子,我们要建立一个正则表达式,功能是能匹配任意浮点数。我们的正则表达式也应该匹配整数,和浮点数(其整数部分没有给出例如:0)。这里并不尽力去匹配带有煮熟的数字,例如:1.5e8(150百万使用科学计数法)。
初一想,下面的正则表达式好像可以,[-+]?[0-9]*\.?[0-9]*.它定义了一个正负号可选的浮点数,接着是可选的数字序列(整数部分),接下来是一个可选的.(dot),接下来是另外一个可选的数字序列。
根据上面的描述我们可能就会发现一个问题,上面的所有正则表达式都是可选的。这个正则表达式将考虑一个正负号,或者一个.(dot)作为一个有效的浮点数。事实上,它甚至考虑将空串作为一个合法的浮点数。如果这个表达式用在一种脚本语言中例如perl或者php中来验证用户输入将会引起严重的问题。
没有避开.(dot)也是一个常见的错误,一个.(dot)没有避开,它将匹配任意字符,包括.(dot)。如果我们没有避开.(dot)4.4将要被考虑为一个浮点数,当然4f/^4也将被考虑成浮点数。
当我们创建正则表达式的时候,考虑它不应该匹配什么内容也是很重要的,甚至比我们应该匹配什么内容更重要。上面的正则表达式的确会匹配一个合适的正则表达式,因为正则表达式是贪婪的。但是它也匹配很多我们不想要匹配的内容,这些内容我们应该排除的。
下面是一个比较好的尝试:[-+]?([0-9]*\.[0-9]+|[0-9]+)。这个正则表达式匹配一个可选的符号,接下来是或者跟0或者数字序列,接着是.(dot)然后是数字序列(一个浮点数有可选的整数部分)或者紧跟一个或多个数字序列(表示一个整数)。
我们可以优化这个正则表达式:[-+]?[0-9]*\.?[0-9]+
如果你要匹配附带有指数的数字,你可以用:[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?
注意到这里使用了圆括号的组合将整个指数部分可选,而不是使得指数部分的每个组成都可选。
最后,如果你想要验证是否一个特定的串是否包含浮点数,而不是在一个很长的文本中寻找浮点数,你将不得不使用锚定你的正则表达式^[-+]?[0-9]*\.?[0-9]+$ 或者 ^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$。
分享到:
相关推荐
正则表达式(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)是一种强大的文本处理工具,它能用来进行字符串匹配、查找、替换等操作。在编程语言中,正则表达式被广泛应用于数据验证、文本解析、日志分析等领域。本资料全集是针对正则表达式...
Boost.Regex库是基于Philip Hazel的PCRE(Perl Compatible Regular Expressions)库实现的,提供了高效且功能丰富的正则表达式操作。`<boost/regex.hpp>`是这个库的核心头文件,包含了所有必要的定义和声明,使得...
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生成图形界面。
在"A Regular Expression Wrapper"项目中,开发者可能已经创建了一个包装器类,将`ATL::CRegEx`的功能进行了封装,使其更容易在应用程序中使用。包装器类可能提供了更加直观的方法,隐藏了底层的COM细节,并且可能...
正则表达式(Regular Expression),简称为regex,是计算机科学中用于处理字符串的强大工具。它通过一种模式匹配的方式来搜索、替换或提取文本,广泛应用于文本编辑器、编程语言、搜索引擎以及各种数据处理任务中。...
正则表达式(Regular Expression,简称regex)是用于匹配字符串模式的一种强大工具,广泛应用于文本处理、数据验证、搜索和替换等场景。在JavaScript和Java等编程语言中,正则表达式扮演着至关重要的角色。 ...
正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,广泛应用于数据验证、搜索与替换、文本分析等多个领域。在IT行业中,熟练掌握正则表达式能够极大地提升处理字符串问题的效率。...
正则表达式(Regular Expression,简称Regex)是编程领域中用于模式匹配和字符串处理的强大工具。在C#中,正则表达式通过System.Text.RegularExpressions命名空间中的Regex类提供支持。这个压缩包文件“regular ...
Hoa \ Regex 该库提供了用于分析正则表达式并基于正则表达式( )生成字符串的工具。 。安装使用 ,要将此库包含到您的依赖项中,您需要 : $ composer require hoa/regex ' ~1.0 ' 有关更多安装过程,请阅读。测验...