匹配java double值的正则表达式
2023-09-11 14:16:05 时间
最近看到Java高手老紫竹写的《判断数字是否为double的正则表达式》,我近来也在学正则表达式的应用,所以来发挥发挥。这里用perl脚本写,因为它支持正则表达式比较好。让我们一步一步来解刨double浮点数:
普通的整数都是合法double型,带上后缀字母d或者D也是double型。比如: 1 +10 -100 100d 987D 因此用正则表达式:
^[-+]?/d[dD]$
chomp($line); if ($line =~ /^[-+]?(/d+(/./d*)?|(/./d+))([eE]([-+]?([012]?/d{1,2}|30[0-7])|-3([01]?[4-9]|[012]?[0-3])))?[dD]?$/) print $line, " is Java double!/n"; else print $line, " is not Java double/n"; }
Java正则表达式匹配aabb、abab格式字符 我们开发过程中,经常用到正则表达式来匹配想要的字符串,或者从一段文本中提取想要的关键字,比如爬虫应用等。正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。正则表达式具有通用型,不仅java里面可以用,其他的语言也一样适用。
Java正则表达式 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种【文本模式(Pattern)】。 正则表达式使用单个字符串来描述、匹配具有相同规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式的核心功能就是处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
java正则表达式进阶 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是 非贪心的 。 非贪心的 模式匹配搜索到的、尽可能短的字符串,而默认的 贪心的 模式匹配搜索到的、尽可能长的字符串。 例如,在字符串 oooo 中, o+? 只匹配单个 o ,而 o+ 匹配所有 o 。
一文学会java正则表达式 1.什么是正则表达式? 在了解正则表达式之前,我们先看几个非常常见的问题: 如何判断字符串是否是有效的电话号码?例如:010-1234567,123ABC456,13510001000等; 如何判断字符串是否是有效的电子邮件地址?例如:test@example.com,test#example等; 如何判断字符串是否是有效的时间?例如:12:34,09:60,99:99等。 一种直观的想法是通过程序判断,这种方法需要为每种用例创建规则,然后用代码实现。 为每一种判断逻辑编写代码实在是太繁琐了。有没有更简单的方法?
Java的正则表达式 这个系列其实没有多少可说的内容了,不过生活总是要继续的,所以一周工作下来,有摸鱼也有忙碌,当然也有一些感慨和思考。
redraiment 阿里巴巴-淘宝-新制造-高级技术专家,PostgreSQL、Clojure、FreeBSD等技术爱好者
最近看到Java高手老紫竹写的《判断数字是否为double的正则表达式》,我近来也在学正则表达式的应用,所以来发挥发挥。这里用perl脚本写,因为它支持正则表达式比较好。让我们一步一步来解刨double浮点数:
普通的整数都是合法double型,带上后缀字母d或者D也是double型。比如: 1 +10 -100 100d 987D 因此用正则表达式:^[-+]?/d[dD]$来匹配。 double型的变量还能保存实数。比如: 1.0 +12.34 -45.896 -563.887d 甚至 124. .123 -.687 在Java中也都是合法double值。 1)如果小数点前有整数的话,那小数点和小数的出现可以随意; 2)如果小数点前面没有数字的话,默认以0做整数,但小数必须出现。也就是说,只有一个小数点的话,那就是非法的double数。因此,我们要用多选分支来做:
^[-+]?(/d+(/./d*)?|/./d+)[dD]?$double变量还有一种,用科学计数法。指数部分只能是十进制整数,允许为负数。比如: 1e123 12.546e54d 4335.546E33 -.54e-7D 因此还要在尾部加上指数的匹配。指数没有小数,所以只要匹配整数就可以。
^[-+]?(/d+(/./d*)?|/./d+)([eE][-+]?/d+)?[dD]?$最后,也是最麻烦的,就是Java中double的取值范围:负数范围:从-1.7976931348623157×10+308到-4.94065645841246544×10-324 正数范围:从4.94065645841246544×10-324到1.7976931348623157×10+308 这也就是说,指数的取值范围在 -324 到 308 之间。如果仅仅是这样,那还好说,关键是前面的小数还这么复杂。为了简化问题,我就把指数的范围在 -323 到 307 之间,对前面的小数没有限制。那首先来匹配 -307 到 307
[-+]?([012]?/d{1,2}|30[0-7])然后另外在匹配 -308 到 -324
-3([01]?[4-9]|[012]?[0-3])合并起来,就是:
^[-+]?(/d+(/./d*)?|/./d+)([eE]([-+]?([012]?/d{1,2}|30[0-7])|-3([01]?[4-9]|[012]?[0-3])))?[dD]?$
chomp($line); if ($line =~ /^[-+]?(/d+(/./d*)?|(/./d+))([eE]([-+]?([012]?/d{1,2}|30[0-7])|-3([01]?[4-9]|[012]?[0-3])))?[dD]?$/) print $line, " is Java double!/n"; else print $line, " is not Java double/n"; }
测试数据:
+ 1e123d -3.543E4456D -45.54879e-323d -777.1234E-324 4553.876e357 1543e307 13.54e15.78d 213.e123d 1.2.3 -.1.1 e12
输出
+ is not Java double - is not Java double . is not Java double e is not Java double a is not Java double 1. is Java double! .1 is Java double! 0.1 is Java double! -. is not Java double -.1 is Java double! +.1 is Java double! 1e123d is Java double! -3.543E4456D is not Java double -45.54879e-323d is Java double! -777.1234E-324 is not Java double 4553.876e357 is not Java double 1543e307 is Java double! 13.54e15.78d is not Java double 213.e123d is Java double! 1.2.3 is not Java double -.1.1 is not Java double +e is not Java double e12 is not Java double
本人的所有原创文章皆保留版权,请尊重原创作品。
转载必须包含本声明,保持本文完整,并以超链接形式注明原始作者“redraiment”和主站点上的本文原始地址。
我的邮箱,欢迎来信(redraiment@gmail.com)
我的Blogger(子清行)
我的Google Sites(子清行)
我的CSDN博客(梦婷轩)
我的百度空间(梦婷轩)
Java正则表达式匹配aabb、abab格式字符 我们开发过程中,经常用到正则表达式来匹配想要的字符串,或者从一段文本中提取想要的关键字,比如爬虫应用等。正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。正则表达式具有通用型,不仅java里面可以用,其他的语言也一样适用。
Java正则表达式 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种【文本模式(Pattern)】。 正则表达式使用单个字符串来描述、匹配具有相同规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式的核心功能就是处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
java正则表达式进阶 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是 非贪心的 。 非贪心的 模式匹配搜索到的、尽可能短的字符串,而默认的 贪心的 模式匹配搜索到的、尽可能长的字符串。 例如,在字符串 oooo 中, o+? 只匹配单个 o ,而 o+ 匹配所有 o 。
一文学会java正则表达式 1.什么是正则表达式? 在了解正则表达式之前,我们先看几个非常常见的问题: 如何判断字符串是否是有效的电话号码?例如:010-1234567,123ABC456,13510001000等; 如何判断字符串是否是有效的电子邮件地址?例如:test@example.com,test#example等; 如何判断字符串是否是有效的时间?例如:12:34,09:60,99:99等。 一种直观的想法是通过程序判断,这种方法需要为每种用例创建规则,然后用代码实现。 为每一种判断逻辑编写代码实在是太繁琐了。有没有更简单的方法?
Java的正则表达式 这个系列其实没有多少可说的内容了,不过生活总是要继续的,所以一周工作下来,有摸鱼也有忙碌,当然也有一些感慨和思考。
redraiment 阿里巴巴-淘宝-新制造-高级技术专家,PostgreSQL、Clojure、FreeBSD等技术爱好者
相关文章
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
- Predicate和Consumer接口– Java 8中java.util.function包下的接口
- Java详解,java后端应届生面试题
- 【Java】java数据库连接池配置的几种方法
- 【Java】整理关于java的String类,equals函数和比较操作符的区别
- 面试复盘 常见面试题 正则表达式 验证邮箱 Java 1-100万整数全部随机生成不重复 遍历一个文件夹下所有的文件和子文件 数据库查询班级最高分 创建一个学生表,记录学生父母名字
- Java开发环境的搭建以及使用eclipse从头一步步创建java项目
- 第35节:Java面向对象中的多线程
- 第二十三节:Java语言基础-详细讲解函数与数组
- java 阅读文档
- 基于 Java EE+MySQL+Dart 实现多平台应用的音乐共享社区【100010395】
- Java经典实例:在正则表达式中控制大小写
- Java经典实例:使用正则表达式:测试模式
- java中文乱码解决之道(五)—–java是如何编码解码的
- Java 设计模式之桥接模式,Java 桥接模式 ,java Bridge Pattern
- 正则表达式工具类,正则表达式封装,Java正则表达式
- How to Use Verbose Options in Java
- myeclipse 10配置jboss 7.1.1无法启动Error: Could not create the Java Virtual Machine
- 下载eclipse 配置eclipse 新建Java项目 写一个小程序 运行
- Java/Js下使用正则表达式匹配嵌套Html标签
- 华为OD机试 -去除多余空格(Java) | 机试题+算法思路+考点+代码解析 【2023】
- 与Java互操作
- 【JAVA】Date类、Calendar类
- java基本类型(数值范围):浮点的底层表示定义,float计算快一些
- Java 变长參数Varargs
- java面向对象编程——抽象和接口
- Java 泛型
- 从零学Java(18)之三元运算符
- 什么是Java序列化,如何实现java序列化
- Java正则表达式 Pattern 类的用法
- java配置文件转义问题
- Java 报错 Information:java: javacTask: 源发行版 8 需要目标发行版 1.8
- Java 正则表达式——贪婪匹配、惰性匹配、支配匹配