利用正则表达式匹配浮点型数据


Posted in Java/Android onMay 30, 2022

前言:

在开发中我们常常会使用到正则表达式,但很奇怪的是,每次你在使用正则表达式的时候你都发现你不会写,不知道语法,可能你大概还记得一部分,但很模糊,对于正则表达式的语法真心记不住,别的程序猿是不是我不清楚,但我是就是这样子,每次写都会发现记不住了,然后又去网上查找资料,又进行一次学习,慢慢的发现基本语法你又会了,但实际上你还是不会,可能是没有完全明白或者在实际开发中没有长期的使用导致,今天写这篇文章纯属唠嗑,其余的差不多都是复制粘贴了,另外说一下最近这一次翻开正则表达式去匹配浮点型数据做的一点思路,这一点和之前的是不一样的。以前写的正则去匹配浮点型的时候会发现无法完全正确的匹配,找了网上不少的高手或者菜鸟教程直接抄过来使用,发现其实都是有问题的,问题出在哪儿呢,大部分出现的问题都是在处理"0"和".“的情况下。你可能忘记了,我可以帮大家会议一下,当然大部分还是对的,但是如果出现以0开头的时候,你会发现,我可以输入n个0开头也能匹配出来,虽然有点会把连续的多个0开头的部分丢掉,但还是让人感觉匹配的不是很好,我有强迫症,这种匹配我认为是不正确的,另外就是”.",当你使用"."的时候,你会发现"xxxx."像这种格式的都能匹配,这是在逗我吗,难道这也算正确的,这种情况我会直接否认掉,但是在以往的开发中,我为了完后任务,当然也就不管了,没那么严格,对于上面出现的这几种情况我都心有不甘的默认了,毕竟开发需要的时间不能都花在搞这种问题上,时间那么有限,所以我当然就默许了这种问题的存在。今天呢又来搞了搞正则,还是相同的东西,我想自己写了,所以自己开搞了,废话有点多了,接下来就进入主题吧。

正则表达式

1、非负浮点型:(^[1-9]\d*\.\d+$|^0\.\d+$|^[1-9]\d*$|^0$)

2、浮点型:(^-?[1-9]\d*\.\d+$|^-?0\.\d+$|^-?[1-9]\d*$|^0$)

上面的正则是怎么写的呢?我来讲一讲

将浮点型数据做拆分,为啥要拆分呢,因为不拆分很难实现匹配浮点型字符串的正确格式

拆分成4类

1、非0开头的浮点型(123.12)
2、0开头的浮点型(0.12)
3、非0整数型
4、0

分别正则表达式

1、^[1-9]\d*\.\d+$
2、^0\.\d+$
3、^[1-9]\d*$
4、^0$

最后将4个表达式组合到一个中就得到最终的结果

(^[1-9]\d*\.\d+$|^0\.\d+$|^[1-9]\d*$|^0$)

浮点型是存在正负数的,所以还需要给得到的正则表达式添加符号

(^-?[1-9]\d*\.\d+$|^-?0\.\d+$|^-?[1-9]\d*$|^0$)

语法解析

符号 描述
^ 以什么开头
$ 以什么结尾
. 匹配任意非\n的单字符
\. 匹配.
+ 匹配一次或多次
* 匹配0次或多次
? 匹配0次或1次
x|y 表示匹配x或者y
{n} 表示匹配n次
[1-9] 表示范围1至9的任意1个数字
() 强制优先级,匹配括号需要在括号前加"\"
- 表示负号

Java代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {
	public static void main(String args[]) {
		String str = "";
		String pattern = "(^[1-9]\\d*\\.\\d+$|^0\\.\\d+$|^[1-9]\\d*$|^0$)";

		Pattern r = Pattern.compile(pattern);
		Matcher m = r.matcher(str);
		System.out.println(m.matches());
	}

}

附:正则表达式(同时匹配整型数和浮点数)

pattern="^[1-9]*[0-9]?(\.[0-9]{1,2})?$"

总结

到此这篇关于利用正则表达式匹配浮点型数据的文章就介绍到这了!


Tags in this post...

Java/Android 相关文章推荐
教你用Java Swing实现自助取款机系统
Jun 11 Java/Android
Java内存模型之happens-before概念详解
Jun 13 Java/Android
详细了解MVC+proxy
Jul 09 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
关于springboot 配置date字段返回时间戳的问题
Jul 25 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
Java 超详细讲解设计模式之中的抽象工厂模式
Mar 25 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
Jul 15 Java/Android
JavaScript正则表达式实现注册信息校验功能
May 30 #Java/Android
Java时间工具类Date的常用处理方法
May 25 #Java/Android
Java实现扫雷游戏详细代码讲解
多线程Spring通过@Scheduled实现定时任务
May 25 #Java/Android
SpringBoot全局异常处理方案分享
May 25 #Java/Android
Java数据结构之堆(优先队列)
May 20 #Java/Android
Java中Dijkstra(迪杰斯特拉)算法
You might like
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php格式化金额函数分享
2015/02/02 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
jquery trim() 功能源代码
2011/02/14 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
如何在python中实现线性回归
2020/08/10 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
采购意向书范本
2014/03/31 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
119消防日活动总结
2014/08/29 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
监护人证明
2015/06/19 职场文书
新党员入党决心书
2015/09/22 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
合作协议书格式范本
2016/03/21 职场文书