iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java正则表达式APIMatcher类方法
  • 801
分享到

Java正则表达式APIMatcher类方法

2024-04-02 19:04:59 801人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、Pattern.DOTALL二、Pattern.LITERAL三、Pattern.MULTILINE四、Matcher类方法索引方法Study方法Replacement方法一

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

正如我们所看到的,只有行终止符之前输入的第一部分匹配。

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

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

现在,如果我们添加所需的字符串,测试将通过:

@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,但狗出现在字符串第一行的末尾。

然而,有了这个标志,同样的测试也会通过,因为匹配器现在考虑了行终止符。因此,字符串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类方法

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

索引方法

索引方法提供有用的索引值,精确显示在输入字符串中找到匹配项的位置。在下面的测试中,我们将确认输入字符串中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方法都试图根据模式匹配输入序列。不同之处在于,匹配需要匹配整个输入序列,而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正则表达式 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java正则表达式APIMatcher类方法

本文链接: https://www.lsjlt.com/news/151044.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java正则表达式APIMatcher类方法
    目录一、Pattern.DOTALL二、Pattern.LITERAL三、Pattern.MULTILINE四、Matcher类方法索引方法Study方法Replacement方法一...
    99+
    2022-11-13
  • Java正则表达式 Pattern 类的用法
    Pattern 类是 Java 正则表达式中的一个重要类,它用于创建一个正则表达式模式对象。Pattern 类的常用方法如下:1. ...
    99+
    2023-09-07
    Java
  • Java正则表达式API字符类
    目录一、Predefined字符类二、Quantifiers三、Capturing Groups一、Predefined字符类 Java正则表达式API也接受预定义的字符类。上面的一...
    99+
    2022-11-13
  • java正则表达式
    目录 一、概念 二、正则表达式语法 三、捕获组 四、Pattern类与Matcher类 1.matches( ) 2.split( ) 3.find( ) 4.group 5.start( )和end( ) 6.replace替换 7.re...
    99+
    2023-09-21
    java 正则表达式
  • Java 之正则表达式语法及常用正则表达式汇总
    正则表达式概念: 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表...
    99+
    2023-08-18
    正则表达式 java 开发语言
  • SQL正则表达式及mybatis中使用正则表达式的方法
    小编给大家分享一下SQL正则表达式及mybatis中使用正则表达式的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql...
    99+
    2022-10-18
  • Java正则表达式——group方法的使用
    目录Java正则表达式——group方法例子Demo1例子Demo2Java正则表达式校验实例1 通过正则表达式制作短信模板2 正则表达式校验身份证总结Jav...
    99+
    2023-01-01
    Java正则表达式 group方法 Java group方法
  • Java 中使用正则表达式的方法
    本篇文章给大家分享的是有关Java 中使用正则表达式的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用RegexString.with(string).pattern(p...
    99+
    2023-05-31
    java 正则表达式 ava
  • C#正则表达式Regex类的用法
    一、C#正则表达式符号模式 字  符 描  述 ...
    99+
    2022-11-12
  • Java正则表达式中Pattern类怎么用
    本篇内容主要讲解“Java正则表达式中Pattern类怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java正则表达式中Pattern类怎么用”吧!前言在Java中,java.util.r...
    99+
    2023-06-26
  • Java 正则表达式匹配
    1 正则表达式 1.1 什么是正则表达式 正则表达式: 定义一个搜索模式的字符串。 正则表达式可以用于搜索、编辑和操作文本。 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/string),它会以定义的模式从左到右...
    99+
    2023-10-27
    正则表达式 java 开发语言
  • Java 正则表达式详解
    正则表达式(Regular Expression),又称为正规表达式、规则表达式、常规表示法等,是一种用来匹配、查找和替换字符串的工...
    99+
    2023-08-16
    Java
  • 【JAVA】正则表达式是啥?
    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言正则表达式正则表达式语法正则表达式的特点捕获组实例 前言 如果我们想要判断给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配...
    99+
    2023-08-16
    java 正则表达式 mysql
  • java正则表达式的实例用法
    本篇内容介绍了“java正则表达式的实例用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java正则表达式实例详解 创建正则表达...
    99+
    2023-06-03
  • Java匹配正则表达式的方法是什么
    这篇文章主要介绍了Java匹配正则表达式的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java匹配正则表达式的方法是什么文章都会有所收获,下面我们一起来看看吧。一.我们先举个例子来看看Java匹配正...
    99+
    2023-07-05
  • 正则表达式regexp_replace的使用方法
    目录前言常用案例总结前言 regexp_replace的使用非常灵活,且容易忘记,故做此笔记。 没有过多的介绍使用说明,只是根据个人理解列出很多相似案例,个人觉得通过对比,...
    99+
    2022-11-13
  • 替换javascript正则表达式的方法
    这篇文章主要讲解了“替换javascript正则表达式的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“替换javascript正则表达式的方法”吧!javascript正则表达式使用替换...
    99+
    2023-06-14
  • Java正则表达式之Pattern类实例详解
    目录前言Pattern 概述Pattern 匹配模式(Pattern flags)代码示例多行模式:Pattern.MULTILINE 示例忽略大小写:Pattern.CASE_IN...
    99+
    2022-11-12
  • 【Java 基础篇】Java 正则表达式
    文章目录 导言一、正则表达式的基本概念二、使用正则表达式的步骤三、示例代码1. 匹配字符串2. 提取匹配的内容3. 替换字符串 总结 导言 正则表达式是一种强大的文本模式匹配工具...
    99+
    2023-09-18
    java 正则表达式 python
  • java正则表达式有哪些
    这篇文章主要为大家展示了“java正则表达式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java正则表达式有哪些”这篇文章吧。 java正则表达式大全...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作