扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍了在Java中正则表达式匹配不到结果如何解决,创新互联网站建设公司,小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随创新互联网站建设公司,小编来看看吧!
成都创新互联企业建站,十年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于成都网站建设、做网站中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。
String str = "\uFEFF"; String regex = " 0 0 102 Send:APPLOCK\n" + "Rev:\n" + "可用资源锁定成功, 60 秒内没有输入指令资源将被Buk收回\n" + "Send:IG\n" + "Rev:\n" + "NO PNR\n" + "Send:\n" + "SS:AA186/N/27JUN18/PEKORD/NN1;\n" + "Rev:\n" + "AA 186 N 27JUN PEKORD NN1 WL OPEN \n" + "UNABLE TO SELL.PLEASE CHECK THE AVAILABILITY WITH \"AV\" AGAIN\n" + "Send:IG\n" + "Rev: SHA717 2018-06-25T21:24:03.4535624+08:00 Success ((.|\\n")*?) ";
str为要匹配的字符串(是传入的),regex为正则表达式
目的是匹配出
在本地测试时可以匹配出来,但是在线上就不行。
真的是百思不得其解……
后来认真比对了一下线上传入的str和本地复制过来的str,发现了了一个微小的不同
线上传入的str行分隔符是\r\n,而复制粘贴到本地之后都变成了
而我的正则表达式中只匹配了\n的情况,因此出现这样的bug
提醒自己要注意系统之间的差别,win上的行分隔符是\n,而Linux是\r
为了能适配所有的环境,可以直接用System.lineSeparator()来替代,当然也可以把表达式写成这样(
((.|\\n|\\r\\n")*?)
补充:Java正则表达式匹配的坑
今天在判断字符串是否存在某个字符串,直接用String.matches(regex),死活匹配不出来,在线正则工具用了很多都是可以的,后面找到问题,总结一下,防止再次踩坑。
java中判断一段字符串中是否包含某个字符串的方式:
String.matches(regex);
阅读源码发现,这个方法本质是调用了Pattern.matches(regex, str),而该方法调Pattern.compile(regex).matcher(input).matches()方法,而Matcher.matches()方法试图将整个区域与模式匹配,如果匹配成功,则可以通过开始、结束和组方法获得更多信息。
即这个方法会在表达式前后加上$(regex$),是对这个字符串全匹配
而不会只匹配其中的子串,如果只想匹配子串,则需要表达式匹配整段
Pattern.compile(regex).matcher(str).find()
Matcher.find()方法则是仅仅进行匹配字串的方法
如果不想使用全局匹配则可以使用Matcher.find()方法
String.matches(regex)
public boolean matches(String regex) { return Pattern.matches(regex, this); } Pattern.matches(regex, this)
public static boolean matches(String regex, CharSequence input) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(input); return m.matches(); }
Pattern.compile
public static Pattern compile(String regex) { return new Pattern(regex, 0); } Pattern.matcher
public Matcher matcher(CharSequence input) { if (!compiled) { synchronized(this) { if (!compiled) compile(); } } Matcher m = new Matcher(this, input); return m; }
Matcher.find()
public boolean find() { int nextSearchIndex = last; if (nextSearchIndex == first) nextSearchIndex++; // If next search starts before region, start it at region if (nextSearchIndex < from) nextSearchIndex = from; // If next search starts beyond region then it fails if (nextSearchIndex > to) { for (int i = 0; i < groups.length; i++) groups[i] = -1; return false; } return search(nextSearchIndex); }
以上就是创新互联网站建设公司,小编为大家收集整理的在Java中正则表达式匹配不到结果如何解决,如何觉得创新互联建站的内容还不错,欢迎将创新互联建站推荐给身边好友。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流