最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java正則表達式匹配不到結(jié)果的解決

 更新時間:2021年02月22日 17:03:28   作者:柯南小Z  
這篇文章主要介紹了Java正則表達式匹配不到結(jié)果的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

如下所示:

String str = "\uFEFF<?xml version=\"1.0\" encoding=\"utf-8\"?><Response xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Header ShouldRecordPerformanceTime=\"false\" Timestamp=\"2018-6-25 21:24:03\" RequestID=\"2c4d0b24-fd48-4a92-a2d8-c66793df2059\" ResultCode=\"Success\" AssemblyVersion=\"2.9.5.0\" RequestBodySize=\"0\" SerializeMode=\"Xml\" RouteStep=\"1\" Environment=\"pro\" /><SSPATResponse><Result>0</Result><FareDetail /><Price>0</Price><ErrCode>102</ErrCode><DetailInfo>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:</DetailInfo><PatOfficeno>SHA717</PatOfficeno></SSPATResponse><ResponseStatus><Timestamp xmlns=\"http://soa.ctrip.com/common/types/v1\">2018-06-25T21:24:03.4535624+08:00</Timestamp><Ack xmlns=\"http://soa.ctrip.com/common/types/v1\">Success</Ack></ResponseStatus></Response>";
 
String regex = "<DetailInfo>((.|\\n")*?)</DetailInfo>";

str為要匹配的字符串(是傳入的),regex為正則表達式

目的是匹配出<DetailInfo>標簽中的內(nèi)容

在本地測試時可以匹配出來,但是在線上就不行。

真的是百思不得其解……

后來認真比對了一下線上傳入的str和本地復(fù)制過來的str,發(fā)現(xiàn)了了一個微小的不同

線上傳入的str行分隔符是\r\n,而復(fù)制粘貼到本地之后都變成了\n

而我的正則表達式中只匹配了\n的情況,因此出現(xiàn)這樣的bug

提醒自己要注意系統(tǒng)之間的差別,win上的行分隔符是\n,而Linux是\r\n

為了能適配所有的環(huán)境,可以直接用System.lineSeparator()來替代,當然也可以把表達式寫成這樣(

<DetailInfo>((.|\\n|\\r\\n")*?)</DetailInfo>

補充:Java正則表達式匹配的坑

今天在判斷字符串是否存在某個字符串,直接用String.matches(regex),死活匹配不出來,在線正則工具用了很多都是可以的,后面找到問題,總結(jié)一下,防止再次踩坑。

一、前提#

java中判斷一段字符串中是否包含某個字符串的方式:

1、#

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$),是對這個字符串全匹配

而不會只匹配其中的子串,如果只想匹配子串,則需要表達式匹配整段

2、#

Pattern.compile(regex).matcher(str).find()

Matcher.find()方法則是僅僅進行匹配字串的方法

如果不想使用全局匹配則可以使用Matcher.find()方法

二、附源碼#

1、String.matches(regex)#

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();
}

2、Matcher.find()#

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);
}

三、總結(jié)#

各個匹配的優(yōu)缺點都有,大家可以按需選擇

如果僅僅只需要獲取字符串中是否包含某個字符串,還是用Matcher.find()比較方便

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • MyBatis源碼剖析之Mapper代理方式詳解

    MyBatis源碼剖析之Mapper代理方式詳解

    這篇文章主要為大家詳細介紹了MyBatis中Mapper代理的方式,文中將通過源碼為大家進行詳細的剖析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • JAVA多線程線程安全性基礎(chǔ)

    JAVA多線程線程安全性基礎(chǔ)

    這篇文章主要介紹了如何測試Java類的線程安全性,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-08-08
  • maven 指定version不生效的問題

    maven 指定version不生效的問題

    這篇文章主要介紹了maven 指定version不生效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring多定時任務(wù)@Scheduled執(zhí)行阻塞問題解決

    Spring多定時任務(wù)@Scheduled執(zhí)行阻塞問題解決

    這篇文章主要介紹了Spring多定時任務(wù)@Scheduled執(zhí)行阻塞問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • SpringBoot返回前端Long類型字段丟失精度問題及解決方案

    SpringBoot返回前端Long類型字段丟失精度問題及解決方案

    Java服務(wù)端返回Long整型數(shù)據(jù)給前端,JS會自動轉(zhuǎn)換為Number類型,本文主要介紹了SpringBoot返回前端Long類型字段丟失精度問題及解決方案,感興趣的可以了解一下
    2024-03-03
  • Java 方法遞歸的思路詳解

    Java 方法遞歸的思路詳解

    程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。但是如果沒終止條件會造成死循環(huán),所以遞歸代碼里要有結(jié)束自調(diào)自的條件,接下來講解一下學(xué)習(xí)遞歸的思路
    2022-04-04
  • Mybatis分頁查詢主從表的實現(xiàn)示例

    Mybatis分頁查詢主從表的實現(xiàn)示例

    本文主要介紹了Mybatis分頁查詢主從表的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 解決springboot項目打成jar包后運行時碰到的小坑

    解決springboot項目打成jar包后運行時碰到的小坑

    這篇文章主要介紹了解決springboot項目打成jar包后運行時碰到的小坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JAVA中的Token 基于Token的身份驗證實例

    JAVA中的Token 基于Token的身份驗證實例

    這篇文章主要介紹了JAVA中的Token 基于Token的身份驗證實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • java中List常用的4種stream()方法解析

    java中List常用的4種stream()方法解析

    Java中的List接口從Java 8開始新增了stream()方法,用于創(chuàng)建一個Stream流對象,這篇文章主要給大家介紹了關(guān)于java中List常用的4種stream()方法的相關(guān)資料,需要的朋友可以參考下
    2024-02-02

最新評論

青田县| 措勤县| 鄯善县| 上蔡县| 漾濞| 嘉黎县| 博野县| 龙口市| 清流县| 化德县| 德州市| 扎赉特旗| 汉川市| 辽阳县| 石城县| 甘泉县| 阜阳市| 绥宁县| 龙陵县| 长白| 辉南县| 忻州市| 牡丹江市| 玉树县| 民和| 南乐县| 吴江市| 卢龙县| 海晏县| 巍山| 元阳县| 淳化县| 桃江县| 托克托县| 东台市| 台东市| 巨鹿县| 崇州市| 十堰市| 霍城县| 上犹县|