java正则表达式使用实例,java中match

  java正则表达式使用实例,java中match

  

目录
一、格局100 . DOTALL二、格局。逐字的三、格局。多线四、匹配器类方法索引方法研究方法更换方法

  

一、Pattern.DOTALL

默认情况下,当我们使用"."时表达式中,我们将匹配输入字符串中的每个字符,直到遇到新行字符。

  使用此标志,匹配也将包括行终止符。我们将通过以下示例更好地理解。这些例子将略有不同。由于我们感兴趣的是针对匹配的字符串进行断言,因此我们将使用制榫机的组方法来返回之前的匹配。

  首先,我们将看到默认行为:

  @ test public void givenRegexWithLineTerminator _ when match failed _ then correct(){ Pattern Pattern=Pattern。编译(.*));Matcher matcher=pattern.matcher(这是一个文本系统。getproperty(行。分隔符“)”续在另一行);火柴人。find();assertEquals(这是一个文本,matcher。组(1));}正如我们所看到的,只有行终止符之前输入的第一部分匹配。

  现在在dotall模式下,包括行终止符在内的整个文本都将匹配:

  @ test public void givenRegexWithLineTerminator _ whenmatcheswithtotal _ then correct(){ Pattern Pattern=Pattern。编译(.*),模式. DOTALL);Matcher matcher=pattern.matcher(这是一个文本系统。getproperty(行。分隔符“)”续在另一行);火柴人。find();assertEquals(这是一个文本系统。getproperty(行。分隔符“)”续在另一行上,matcher。组(1));}我们还可以使用嵌入的标志表达式来启用dotall模式:

  @ test public void givenRegexWithLineTerminator _ whenMatchesWithEmbeddedDotall _ then correct(){ Pattern Pattern=Pattern。编译((?s).*));Matcher matcher=pattern.matcher(这是一个文本系统。getproperty(行。分隔符“)”续在另一行);火柴人。find();assertEquals(这是一个文本系统。getproperty(行。分隔符“)”续在另一行上,matcher。组(1));}

  

二、Pattern.LITERAL

在此模式下,匹配器对任何元字符、转义字符或正则表达式语法都没有特殊意义。如果没有此标志,匹配器将根据任何输入字符串匹配以下正则表达式:

  @ test public void给定regex _ when matches withoutliteralflag _ then correct(){ int matches=runTest(.*)、 text );assertTrue(匹配0);}这是我们在所有示例中看到的默认行为。但是,使用此标志时,将找不到匹配项,因为匹配器将查找(.*),而不是解释它:

  @Testpublic void givenRegex_w

  henMatchFailsWithLiteralFlag_thenCorrect() { int matches = runTest("(.*)", "text", Pattern.LITERAL); assertFalse(matches > 0);}现在,如果我们添加所需的字符串,测试将通过:

  

@Testpublic void givenRegex_whenMatchesWithLiteralFlag_thenCorrect() { int matches = runTest("(.*)", "text(.*)", Pattern.LITERAL); assertTrue(matches > 0);}
没有用于启用文字分析的嵌入标志字符。

  

  

三、Pattern.MULTILINE

默认情况下,^$元字符分别在整个输入字符串的开头和结尾绝对匹配。匹配器忽略任何行终止符:

  

@Testpublic void givenRegex_whenMatchFailsWithoutMultilineFlag_thenCorrect() { int matches = runTest( "dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); assertFalse(matches > 0);}
匹配失败,因为匹配器在整个字符串的末尾搜索dog,但狗出现在字符串第一行的末尾。

  然而,有了这个标志,同样的测试也会通过,因为匹配器现在考虑了行终止符。因此,字符串dog正好在行终止之前找到,因此成功:

  

@Testpublic 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);}
以下是嵌入式标志版本:

  

@Testpublic 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类方法

在本节中,我们将研究Matcher类的一些有用方法。为了清晰起见,我们将根据功能对它们进行分组。

  

  

索引方法

索引方法提供有用的索引值,精确显示在输入字符串中找到匹配项的位置。在下面的测试中,我们将确认输入字符串中dog匹配的开始和结束索引:

  

@Testpublic 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方法都试图根据模式匹配输入序列。不同之处在于,匹配需要匹配整个输入序列,而lookingAt则不需要。

  这两种方法都从输入字符串的开头开始:

  

@Testpublic void whenStudyMethodsWork_thenCorrect() { Pattern pattern = Pattern.compile("dog"); Matcher matcher = pattern.matcher("dogs are friendly"); assertTrue(matcher.lookingAt()); assertFalse(matcher.matches());}
matches方法将在如下情况下返回true

  

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

  

Replacement方法

Replacement方法可用于替换输入字符串中的文本。常见的是replaceFirstreplaceAll

  replaceFirstreplaceAll方法替换与给定正则表达式匹配的文本。正如其名称所示,replaceFirst替换第一个引用,replaceAll替换所有引用:

  

@Testpublic 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);}
替换所有引用:

  

@Testpublic 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正则表达式 内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: