Java正则写法可以上Java正则菜鸟网学习,使用中有些字符需要转译,如 “.” 不转译的话可代表任意字符,这样在匹配浮点数时就不正确了,如正则“[0-9]+.[0-9]+”,在正则匹配时,23.5是对的,23r5 也是对的,因为“.”在没有转译时可代表任意字符,所以在使用是需要转译,转译方法 “\\.”,注意这里是两个斜杠。
正则匹配过滤、 获取匹配的字符值
现在的需求是,将集合中的字符用正则匹配,判断字符中是否满足正则规则,满足则过滤出来进行特别的处理,代码如下:
List<String> list = Arrays.asList("RKAS2563-36.5W-25Ω-23J","R254-32W-32Ω","EKS235-220V-12W-35J","RS521-45V-63W-J");
int index = 0;
String numReg = "[0-9]+"//只匹配正整数 "+"代表匹配任意多次
String reg = "(-[0-9]+\\.[0-9]+[W])|(-[0-9]+[K][W])";//匹配数字加单位W或KW,如23.5W 23.5KW 23W 都可以匹配
String regx = "(-[0-9]+\\.[0-9]+[V])|(-[0-9]+[K][V])";
Pattern pattern = Pattern.compile(reg);
Pattern patternx = Pattern.compile(regx);
for(String str : list){
Matcher matcher = pattern.matcher(str);
if(matcher.find()){//如果匹配一次可以用if做判断,如果需要匹配多次可以用swile
index = matcher.start();//获取第一次匹配的下标
//正则匹配后也可以获取本次匹配的值,如上面我们匹配了功率值带单位W的字符,通过截取,获取到的字符为32W,我们可以获取数字,可以通过字符截取,也可以通过正则匹配获取数字32
String arr = "32W";
Pattern numPattern = Pattern.compile(numReg);
Matcher numMatcher = numPattern.matcher(arr);
if(numMatcher.find()){
String num = numMatcher.group();//此方法用于获取与先前匹配结果匹配的输入子序列,可以获取到23
}
//下面就是对匹配的数据的一些特殊处理,这里只记录如何使用正则匹配,所以对数据的处理就不再详细赘述
String powers = str.substring(index+1);
}
}
正则判断字符是否只包含某类字符
String str = "123s";
Patter p = Patter.compile("[0-9]*");//正整数正则
if(pattern.matcher(str).matches()){//判断字符中是否只包含数字,返回boolean
}