正则表达式匹配双色球

 


(?:((0[1-9]\s)|([1|2]\d\s)|(3[0-6]\s))(?!.*\1)){6}\+\s((0[1-9])|(1[0-6]))

 

 

01 02 03 04 22 28 + 01 前6个不重复

 

		while((s = in.readLine())!=null){
			String[] temp = s.split(" ");
			if(temp.length != 8 || !temp[6].equals("+")) {
				System.out.println(s);
				continue;
			}
			for(int i=0;i<temp.length;i++){
				if(i == 6){
					continue;
				}
				int number = Integer.parseInt(temp[i]);
				if(i==7 && (number<1||number>16)){
					System.out.println(s);
					continue;
				}
				if(i==7) continue;
				if(number<1||number>36){
					System.out.println(s);
					continue;
				}
			}
			if(temp[0].equals(temp[1])||
					temp[0].equals(temp[2])||
					temp[0].equals(temp[3])||
					temp[0].equals(temp[4])||
					temp[0].equals(temp[5])||
					temp[1].equals(temp[2])||
					temp[1].equals(temp[3])||
					temp[1].equals(temp[4])||
					temp[1].equals(temp[5])||
					temp[2].equals(temp[3])||
					temp[2].equals(temp[4])||
					temp[2].equals(temp[5])||
					temp[3].equals(temp[4])||
					temp[3].equals(temp[5])||
					temp[4].equals(temp[5])){
				System.out.println(s);
				continue;
			}
				
			result ++;
		}

JAVA数据来验证,110W数据大约花费4秒左右

 

		while((s = in.readLine())!=null){
			if (!s.matches("(?:((0[1-9]\\s)|([1|2]\\d\\s)|(3[0-6]\\s))(?!.*\\1)){6}\\+\\s((0[1-9])|(1[0-6]))")) {
				System.out.println(s);
			}
			result ++;
		}
	


正则表达式来验证,110W数据竟然花费了14S左右

 

		Pattern pattern = Pattern.compile("(?:((0[1-9]\\s)|([1|2]\\d\\s)|(3[0-6]\\s))(?!.*\\1)){6}\\+\\s((0[1-9])|(1[0-6]))");
		while((s = in.readLine())!=null){
//			if (!s.matches("(?:((0[1-9]\\s)|([1|2]\\d\\s)|(3[0-6]\\s))(?!.*\\1)){6}\\+\\s((0[1-9])|(1[0-6]))")) {
//				System.out.println(s);
//			}
			if(!pattern.matcher(s).matches()){
				System.out.println(s);
			}
			result ++;
		}


用这种方式的正则表达式来验证,110W数据大约花费了8S左右

 

所以如果使用正则,建议采用第二种正则表达式的方式,当然与JAVA相比还是慢,慢有可能出现在1.正则可能有更优化的方式 2.通配符的使用,匹配的次数比较多

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值