用正则表达式匹配单位查询

业务场景:输入【1核】、【2g】、【3mbps】需要将数字拿到,拼接成为sql语句。

一开始考虑用字符串截取,后续思考,用正则biao表达式会更好些,下面直接上代码:

一、代码实现

package com.test.test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TTT {

	public static void main(String[] args) {
		//2位数字+"核"
		String regit="[1-9]{1,2}[\u6838]";
		Pattern abs = Pattern.compile(regit);
		String condition="32核";
		Matcher mat = abs.matcher(condition);
		String str="";
		if(mat.matches()) {
			str=mat.group(0).split("核")[0];
		    System.out.println(str);
		}
		
		//2位数字+"G"
		regit="[1-9]{1,2}[Gg]";
		condition="55g";
		abs=Pattern.compile(regit);
		mat = abs.matcher(condition);
		if(mat.matches()) {
			str=mat.group(0).toUpperCase().split("G")[0];
		    System.out.println(str);
		}
		
		//2位数字+"Mbps"
		regit="[1-9]{1,4}[Mm][Bb][Pp][Ss]";
		condition="87mbps";
		abs=Pattern.compile(regit);
		mat = abs.matcher(condition);
		if(mat.matches()) {
			str=mat.group(0).toUpperCase().split("MBPS")[0];
		    System.out.println(str);
		}
	}
}

输出结果:

截取完成

二、注意事项

1.匹配中文字:核,需要将核,转化为unicode,即:\u6838。(转换地址:http://www.bejson.com/convert/unicode_chinese/

2.单位注意大小写,【Gg】代表匹配大写的G和小写的g

3.不建议直接截取。截取一般情况下是很容易出现异常的,万一得到的数据,只有一个mbp,直接截取了,往往会报错。但是如果先用正则表达式去判断一下,判断通过了,再去执行截取动作的话,这样成功率就比较高。

 

4.该改造,只针对于简单场景,如果是比较复杂的查询环境,建议使用solr等专业的搜索引擎实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值