這篇文章主要介紹了在Java中正則表達式匹配不到結(jié)果如何解決,創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,小編覺得不錯,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,小編來看看吧!
成都創(chuàng)新互聯(lián)企業(yè)建站,十年網(wǎng)站建設(shè)經(jīng)驗,專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計,有多年建站和網(wǎng)站代運營經(jīng)驗,設(shè)計師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于成都網(wǎng)站建設(shè)、做網(wǎng)站中不同領(lǐng)域進行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準市場調(diào)研,為客戶提供的解決方案。Java是一門面向?qū)ο缶幊陶Z言,可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。
String str = "\uFEFF"; String regex = " 0 0 102 Send:APPLOCK\n" + "Rev:\n" + "可用資源鎖定成功, 60 秒內(nèi)沒有輸入指令資源將被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和本地復(fù)制過來的str,發(fā)現(xiàn)了了一個微小的不同
線上傳入的str行分隔符是\r\n,而復(fù)制粘貼到本地之后都變成了
而我的正則表達式中只匹配了\n的情況,因此出現(xiàn)這樣的bug
提醒自己要注意系統(tǒng)之間的差別,win上的行分隔符是\n,而Linux是\r
為了能適配所有的環(huán)境,可以直接用System.lineSeparator()來替代,當然也可以把表達式寫成這樣(
((.|\\n|\\r\\n")*?)
補充:Java正則表達式匹配的坑
今天在判斷字符串是否存在某個字符串,直接用String.matches(regex),死活匹配不出來,在線正則工具用了很多都是可以的,后面找到問題,總結(jié)一下,防止再次踩坑。
java中判斷一段字符串中是否包含某個字符串的方式:
String.matches(regex);
閱讀源碼發(fā)現(xiàn),這個方法本質(zhì)是調(diào)用了Pattern.matches(regex, str),而該方法調(diào)Pattern.compile(regex).matcher(input).matches()方法,而Matcher.matches()方法試圖將整個區(qū)域與模式匹配,如果匹配成功,則可以通過開始、結(jié)束和組方法獲得更多信息。
即這個方法會在表達式前后加上$(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); }
以上就是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,小編為大家收集整理的在Java中正則表達式匹配不到結(jié)果如何解決,如何覺得創(chuàng)新互聯(lián)建站的內(nèi)容還不錯,歡迎將創(chuàng)新互聯(lián)建站推薦給身邊好友。