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之间的数。
最后加了一个“”号,以为项目要求范围可以分段,可以用“,”间隔,所以加号匹配前面的子表达式任意次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值