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

Java正則表達式API Matcher類方法

 更新時間:2022年06月10日 09:11:52   作者:?sofia?  
這篇文章主要介紹了Java正則表達式API Matcher類方法,對Matcher類的一些有用方法進行功能對它們進行分組展開介紹,需要的朋友可以參考一下

一、Pattern.DOTALL

默認情況下,當我們使用“.”時表達式中,我們將匹配輸入字符串中的每個字符,直到遇到新行字符。

使用此標志,匹配也將包括行終止符。我們將通過以下示例更好地理解。這些例子將略有不同。由于我們感興趣的是針對匹配的字符串進行斷言,因此我們將使用matcher的group方法來返回之前的匹配。

首先,我們將看到默認行為:

@Test
public void givenRegexWithLineTerminator_whenMatchFails_thenCorrect() {
    Pattern pattern = Pattern.compile("(.*)");
    Matcher matcher = pattern.matcher(
      "this is a text" + System.getProperty("line.separator") 
        + " continued on another line");
    matcher.find();
 
    assertEquals("this is a text", matcher.group(1));
}

正如我們所看到的,只有行終止符之前輸入的第一部分匹配。

現(xiàn)在在dotall模式下,包括行終止符在內的整個文本都將匹配:

@Test
public void givenRegexWithLineTerminator_whenMatchesWithDotall_thenCorrect() {
    Pattern pattern = Pattern.compile("(.*)", Pattern.DOTALL);
    Matcher matcher = pattern.matcher(
      "this is a text" + System.getProperty("line.separator") 
        + " continued on another line");
    matcher.find();
    assertEquals(
      "this is a text" + System.getProperty("line.separator") 
        + " continued on another line", matcher.group(1));
}

我們還可以使用嵌入的標志表達式來啟用dotall模式:

@Test
public void givenRegexWithLineTerminator_whenMatchesWithEmbeddedDotall
  _thenCorrect() {
    
    Pattern pattern = Pattern.compile("(?s)(.*)");
    Matcher matcher = pattern.matcher(
      "this is a text" + System.getProperty("line.separator") 
        + " continued on another line");
    matcher.find();
 
    assertEquals(
      "this is a text" + System.getProperty("line.separator") 
        + " continued on another line", matcher.group(1));
}

二、Pattern.LITERAL

在此模式下,matcher對任何元字符、轉義字符或正則表達式語法都沒有特殊意義。如果沒有此標志,匹配器將根據(jù)任何輸入字符串匹配以下正則表達式:

@Test
public void givenRegex_whenMatchesWithoutLiteralFlag_thenCorrect() {
    int matches = runTest("(.*)", "text");
 
    assertTrue(matches > 0);
}

這是我們在所有示例中看到的默認行為。但是,使用此標志時,將找不到匹配項,因為匹配器將查找(.*),而不是解釋它:

@Test
public void givenRegex_whenMatchFailsWithLiteralFlag_thenCorrect() {
    int matches = runTest("(.*)", "text", Pattern.LITERAL);
 
    assertFalse(matches > 0);
}

現(xiàn)在,如果我們添加所需的字符串,測試將通過:

@Test
public void givenRegex_whenMatchesWithLiteralFlag_thenCorrect() {
    int matches = runTest("(.*)", "text(.*)", Pattern.LITERAL);
 
    assertTrue(matches > 0);
}

沒有用于啟用文字分析的嵌入標志字符。

三、Pattern.MULTILINE

默認情況下,^$元字符分別在整個輸入字符串的開頭和結尾絕對匹配。匹配器忽略任何行終止符:

@Test
public void givenRegex_whenMatchFailsWithoutMultilineFlag_thenCorrect() {
    int matches = runTest(
      "dog$", "This is a dog" + System.getProperty("line.separator") 
      + "this is a fox");
 
    assertFalse(matches > 0);
}

匹配失敗,因為匹配器在整個字符串的末尾搜索dog,但狗出現(xiàn)在字符串第一行的末尾。

然而,有了這個標志,同樣的測試也會通過,因為匹配器現(xiàn)在考慮了行終止符。因此,字符串dog正好在行終止之前找到,因此成功:

@Test
public void givenRegex_whenMatchesWithMultilineFlag_thenCorrect() {
    int matches = runTest(
      "dog$", "This is a dog" + System.getProperty("line.separator") 
      + "this is a fox", Pattern.MULTILINE);
 
    assertTrue(matches > 0);
}

以下是嵌入式標志版本:

@Test
public void givenRegex_whenMatchesWithEmbeddedMultilineFlag_
  thenCorrect() {
    int matches = runTest(
      "(?m)dog$", "This is a dog" + System.getProperty("line.separator") 
      + "this is a fox");
 
    assertTrue(matches > 0);
}

四、Matcher類方法

在本節(jié)中,我們將研究Matcher類的一些有用方法。為了清晰起見,我們將根據(jù)功能對它們進行分組。

索引方法

索引方法提供有用的索引值,精確顯示在輸入字符串中找到匹配項的位置。在下面的測試中,我們將確認輸入字符串中dog匹配的開始和結束索引:

@Test
public void givenMatch_whenGetsIndices_thenCorrect() {
    Pattern pattern = Pattern.compile("dog");
    Matcher matcher = pattern.matcher("This dog is mine");
    matcher.find();
 
    assertEquals(5, matcher.start());
    assertEquals(8, matcher.end());
}

Study方法

Study方法遍歷輸入字符串并返回一個布爾值,指示是否找到該模式。常用的是matcheslookingAt方法。

matcheslookingAt方法都試圖根據(jù)模式匹配輸入序列。不同之處在于,匹配需要匹配整個輸入序列,而lookingAt則不需要。

這兩種方法都從輸入字符串的開頭開始:

@Test
public void whenStudyMethodsWork_thenCorrect() {
    Pattern pattern = Pattern.compile("dog");
    Matcher matcher = pattern.matcher("dogs are friendly");
 
    assertTrue(matcher.lookingAt());
    assertFalse(matcher.matches());
}

matches方法將在如下情況下返回true

@Test
public void whenMatchesStudyMethodWorks_thenCorrect() {
    Pattern pattern = Pattern.compile("dog");
    Matcher matcher = pattern.matcher("dog");
 
    assertTrue(matcher.matches());
}

Replacement方法

Replacement方法可用于替換輸入字符串中的文本。常見的是replaceFirstreplaceAll

replaceFirstreplaceAll方法替換與給定正則表達式匹配的文本。正如其名稱所示,replaceFirst替換第一個引用,replaceAll替換所有引用:

@Test
public void whenReplaceFirstWorks_thenCorrect() {
    Pattern pattern = Pattern.compile("dog");
    Matcher matcher = pattern.matcher(
      "dogs are domestic animals, dogs are friendly");
    String newStr = matcher.replaceFirst("cat");
 
    assertEquals(
      "cats are domestic animals, dogs are friendly", newStr);
}

替換所有引用:

@Test
public void whenReplaceAllWorks_thenCorrect() {
    Pattern pattern = Pattern.compile("dog");
    Matcher matcher = pattern.matcher(
      "dogs are domestic animals, dogs are friendly");
    String newStr = matcher.replaceAll("cat");
 
    assertEquals("cats are domestic animals, cats are friendly", newStr);
}

replaceAll方法允許我們用相同的替換替換所有匹配項。

到此這篇關于Java正則表達式API Matcher類方法的文章就介紹到這了,更多相關Java正則表達式 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java設計模式之單例模式的詳解及優(yōu)點

    java設計模式之單例模式的詳解及優(yōu)點

    這篇文章主要介紹了java設計模式之單例模式的詳解及優(yōu)點的相關資料,如果一個類始終只能創(chuàng)建一個實例,那么這個類被稱為單例類,這種設計模式被稱為單例模式,需要的朋友可以參考下
    2017-08-08
  • Java中的XML解析技術詳析

    Java中的XML解析技術詳析

    XML文檔是一個文檔樹,從根部開始,并擴展到樹的最底部,下面這篇文章主要給大家介紹了關于Java中XML解析技術的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Springboot整合SpringSecurity的完整案例詳解

    Springboot整合SpringSecurity的完整案例詳解

    Spring Security是基于Spring生態(tài)圈的,用于提供安全訪問控制解決方案的框架,Spring Security登錄認證主要涉及兩個重要的接口 UserDetailService和UserDetails接口,本文對Springboot整合SpringSecurity過程給大家介紹的非常詳細,需要的朋友參考下吧
    2024-01-01
  • Java設計模式之策略模式深入刨析

    Java設計模式之策略模式深入刨析

    策略模式屬于Java 23種設計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。本文將通過示例詳細講解這一模式,需要的可以參考一下
    2022-05-05
  • Java使用NioSocket手動實現(xiàn)HTTP服務器

    Java使用NioSocket手動實現(xiàn)HTTP服務器

    本篇文章主要介紹了Java使用NioSocket手動實現(xiàn)HTTP服務器,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-05-05
  • Spring Boot Admin Server管理客戶端過程詳解

    Spring Boot Admin Server管理客戶端過程詳解

    這篇文章主要介紹了Spring Boot Admin Server管理客戶端過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot去除內嵌tomcat的實現(xiàn)

    SpringBoot去除內嵌tomcat的實現(xiàn)

    這篇文章主要介紹了SpringBoot去除內嵌tomcat的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java實現(xiàn)計算周期性提醒的示例

    java實現(xiàn)計算周期性提醒的示例

    本文分享一個java實現(xiàn)計算周期性提醒的示例,可以計算父親節(jié)、母親節(jié)這樣的節(jié)日,也可以定義如每月最好一個周五,以方便安排會議
    2014-04-04
  • Java之進程和線程的區(qū)別

    Java之進程和線程的區(qū)別

    這篇文章主要介紹了進程與線程的區(qū)別,線程具有許多傳統(tǒng)進程所具有的特征,而把傳統(tǒng)的進程稱為重型進程(Heavy—Weight Process),它相當于只有一個線程的任務,有感興趣的小伙伴可以參考閱讀本文
    2023-03-03
  • jpa介紹以及在spring boot中使用詳解

    jpa介紹以及在spring boot中使用詳解

    最近在項目中使用了一下jpa,發(fā)現(xiàn)還是挺好用的。這里就來講一下jpa以及在spring boot中的使用。在這里我們先來了解一下jpa,希望能給你帶來幫助
    2021-08-08

最新評論

宁城县| 太白县| 浠水县| 广丰县| 邛崃市| 福建省| 衡南县| 东兴市| 日喀则市| 海城市| 尤溪县| 鹿泉市| 梅州市| 梅河口市| 兰西县| 华容县| 渑池县| 铜陵市| 石狮市| 大余县| 伽师县| 吉水县| 邳州市| 泊头市| 石家庄市| 保亭| 萨嘎县| 行唐县| 葵青区| 金乡县| 东乌| 射洪县| 安仁县| 河东区| 建始县| 东莞市| 佛学| 宜章县| 沁源县| 遂平县| 阆中市|