客户有一个扫码校验的需求:扫的条码不能是以VP开关的条码,因为VP开头的是生产码,这个扫的码是产品码,就写了一个不以VP开头正则表达式:"^([^V]|(V[^P]))",在线测试都是通过的
匹配不到的测试:
能匹配到的测试:
java版在线测试:
本地单元测试:
相同的正则表达式,竟然匹配不到,神马情况???
后面百度了一下,根据一篇文章(链接:Java正则表达式匹配不到结果的解决_java_脚本之家 (jb51.net))找到了思路,原来刚开始的方法:
Pattern r = Pattern.compile(pattern);
boolean m1 = str.matches(pattern);
是将整个字符串与正则表达式进行匹配,而我的需求只是判断开头2个字母能否匹配,所以不能这样匹配!
最后换成下面这种方式就能匹配到了:
具体代码:
String str = "V1P4490032877";
String pattern = "^([^V]|(V[^P]))";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
while(m.find()){
System.out.println("匹配到:"+m.group());
}
希望能帮忙到大家!有帮助的请点个赞或回复下,谢谢。