java 用正则表达式处理常见问题_蓝枫@的博客-程序员秘密

技术标签: JAVA开发  

java 用正则表达式处理常见问题

工作中遇到一个需求,有个值域范围是0-65535之间,范围之间用“-”表示,可以用“,”间隔。示例:3-76,122-8888,9000-60000
废话不多说,先上代码

public static boolean checkValid(String input) {
    
		String regex = "(([0-5]?\\d?\\d?\\d?\\d|6[0-4]\\d\\d\\d|65[0-4]\\d\\d|655[0-2]\\d|6553[0-5])-([0-5]?\\d?\\d?\\d?\\d|6[0-4]\\d\\d\\d|65[0-4]\\d\\d|655[0-2]\\d|6553[0-5])[,]?)*";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(input);
		
		boolean isOutLimit = true;
		
		//如果以','结尾,删掉这个','
		if (",".equals(input.substring(input.length() - 1))) {
    
			input = input.substring(0, input.length() - 1);
		}
		if (input.split("\\,").length > 5) {
    
			isOutLimit = false;
		}
		return (matcher.matches() && isOutLimit);
	}

主要解释一下我写的正则表达式:
String regex = “(([0-5]?\d?\d?\d?\d|6[0-4]\d\d\d|65[0-4]\d\d|655[0-2]\d|6553[0-5])-([0-5]?\d?\d?\d?\d|6[0-4]\d\d\d|65[0-4]\d\d|655[0-2]\d|6553[0-5])[,]?)*”;
https://www.cnblogs.com/lzq198754/p/5780340.html

“/”是转义字符

  • [a-z]
    字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身

  • ?
    匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。

  • \d
    匹配一个数字字符。等价于[0-9]。

  • |
    将两个匹配条件进行逻辑“或”(Or)运算。

  • (pattern)
    匹配pattern并获取这一匹配。

    匹配前面的子表达式任意次

所以([0-5]?\d?\d?\d?\d|6[0-4]\d\d\d|65[0-4]\d\d|655[0-2]\d|6553[0-5])我们就可以理解为
“[0-5]” 以是0到5开头的数字,
“?” 后面匹配0到1个,
“\d” 0到9的数字
“|” 或者
以6开头的数字,后一位是
“[0-4]” 以是0到4开头的数字,后一位是
“\d” 0到9的数字

以此类推可以匹配所有0到65535之间的数。
最后加了一个“”号,以为项目要求范围可以分段,可以用“,”间隔,所以加号匹配前面的子表达式任意次

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31121267/article/details/104678152

智能推荐

CodeSmith 使用教程(1): 概述_引路蜂的博客-程序员秘密

前面正在介绍hibernate的开发教程,提到hibernate 在.Net 平台上相应的ORM工具为NHibernate ,使用NHibernate 就不能不提到CodeSmith。CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用

java程序应该看的书籍_大包包99的博客-程序员秘密

编程开发1)《effective java中文版》 2)《分布式java应用》 淘宝又见淘宝 3)《代码大全》像是一本百科全书,十八般武艺样样都有了。看了这本书,不会武功的也能耍一阵子。4)《java并发编程实践》不可多得并发编程的好书,在淘宝上面淘来的影印的。5)《java加密与解密的艺术》修练这种功夫还是需要的,毕竟这个世界给人...

Python就业指导建议(Python学习路线)_肉尼的博客-程序员秘密

最近有很多伙伴希望我能给一些关于python的就业指导;之前出过很多关于Python学习路线的就业指导方面文章,但是并不是很完善,所以希望这期关于python的就业指导能够很全面很详细的聊聊就业的那些事,以下都是个人经验和建议,如有偏差还望指正!一、就业方向不管做任何事,一开始就有一个方向会让你有很高的效率;大家都听说python几乎无所不能,那具体有哪些职位呢?测试开发工程师运维工程师...

BurpSuite爆破(Intruder)模块四种模式介绍_Dejavu_^_^的博客-程序员秘密

前言bp的intruder模块有四种模式:Sniper、Battering ram、Pitchfork、Cluster bomb,接下来分别介绍一下四种模式的区别。1. Sniper (狙击手)可以理解为一个一个爆破这里选择sniper,然后标记name和pwd 两个参数payload set只能选一个,也就是字典只能设置一个,然后用字典替换选择的参数结果就是pwd为初始值(123)不变,pwd用字典遍历一遍,然后name为初始值(123)不变,pwd用字典遍历一遍。2. Batter

go和python区别_Go语言和Python哪一个更容易学呢?_weixin_39787089的博客-程序员秘密

Python和Go都是用于编写Web应用程序的强大的高级编程语言,它们之间有什么区别吗?下面本篇文章就来带大家认识一下Python和Go语言,介绍一下Python和Go之间的区别,希望对大家有所帮助。什么是Python?Python是一种功能强大的高级编程语言,主要用于科学和工程计算。它是一种高效的语言,优雅务实,简单而强大,适合新手和专业人士的编程。Python支持多种编程范例,并提出了一个大型...

资深开发者们是如何读书的?---线下读书会记录_dotNET跨平台的博客-程序员秘密

读了多少书?怎么读书?——请问大家最近读书了吗?一年大概读了多少本书。有超过20本,超过30本,超过50本吗?在7月14日由长沙互联网活动基地和长沙.NET技术社区组织的...

随便推点

第三周——基于对象的程序设计——三角形类(2)_舒绾的博客-程序员秘密

问题及代码:/* .*Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: 图书馆的书 .cpp *作 者:莉莉 *完成日期:2015年3月18日 *版 本 号:v1.0 *问题描述:设计一个三角形类,请给出各成员函数的定义 */ #include #include

malloc/free内存碎片的产生原因_腾腾的博客-程序员秘密

malloc和free大量使用后回造成内存碎片,那么这种碎片形成的机理是什么?如果机理是申请的内存空间大小(太小)所形成的,那么申请多大的区域能够最大限度的避免内存碎片呢(这里的避免不是绝对的避免,只是一种概率)?      内存碎片一般是由于空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用.产生内存碎片的方法很简单,举个例:         假设有一块一共有100个单位的连

从终端输入10个数字(乱序),利用简单选择排序法对这10个数字排序,结果从小到大排列。_从终端输入10个数字(乱序),利用简单选择排序法对这10个数字排序,结果从小到大排列_攻城狮晨哲的博客-程序员秘密

从终端输入10个数字(乱序),利用简单选择排序法对这10个数字排序,结果从小到大排列。#include<stdio.h>#define ARRAY_SIZE(buf) (sizeof(buf) / sizeof(buf[0]))void scanf_nu(int *buf, int n){ int i; for(i = 0; i < n; i++) scanf("%d",&buf[i]);}void swap(int *a, int

图片区域解码BitmapRegionDecoder_bitmapregiondecoder原理_heart荼毒的博客-程序员秘密

问一个简单的问题:如何加载一张图片?可能很多朋友会说使用Glide,Picasso等图片加载库来加载图片,或者使用BitmapFactory来加载图片。但是,大家应该知道,无论是使用Glide还是使用BitmapFactory加载图片,加载的图片都是需要做压缩的,不然会导致oom。那么,如果我不允许压缩,要加载一张高清的大图,那么如何实现?这就需要使用图片区域解码BitmapRegionDecoder

3D touch_helloworld_junyang的博客-程序员秘密

#import "BSTableViewController.h"#import "BSDetailViewController.h"@interface BSTableViewController ()UIViewControllerPreviewingDelegate,BSDetailViewControllerDelegate>@p