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

Java正则表达式API字符类

2024-04-02 19:04:59 948人浏览 泡泡鱼

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

摘要

目录一、Predefined字符类二、Quantifiers三、Capturing Groups一、Predefined字符类 Java正则表达式api也接受预定义的字符类。上面的一

一、Predefined字符类

Java正则表达式api也接受预定义的字符类。上面的一些字符类可以用更短的形式表示,尽管这会降低代码的直观性。这个正则表达式的Java版本的一个特殊方面是转义字符。

正如我们将看到的,大多数字符都以反斜杠开头,这在Java中有特殊的意义。对于要由模式类编译的这些,必须转义前导反斜杠,即.\d变为\\d

匹配的数字,相当于[0-9]

@Test
public void givenDigits_whenMatches_thenCorrect() {
    int matches = runTest("\\d", "123");
 
    assertEquals(matches, 3);
}

匹配非数字,相当于[^0-9]

@Test
public void givenNonDigits_whenMatches_thenCorrect() {
    int mathces = runTest("\\D", "a6c");
 
    assertEquals(matches, 2);
}

匹配空白:

@Test
public void givenWhiteSpace_whenMatches_thenCorrect() {
    int matches = runTest("\\s", "a c");
 
    assertEquals(matches, 1);
}

匹配非空白:

@Test
public void givenNonWhiteSpace_whenMatches_thenCorrect() {
    int matches = runTest("\\S", "a c");
 
    assertEquals(matches, 2);
}

匹配一个单词字符,相当于[a-zA-Z_0-9]

@Test
public void givenWordCharacter_whenMatches_thenCorrect() {
    int matches = runTest("\\w", "hi!");
 
    assertEquals(matches, 2);
}

匹配非单词字符:

@Test
public void givenNonWordCharacter_whenMatches_thenCorrect() {
    int matches = runTest("\\W", "hi!");
 
    assertEquals(matches, 1);
}

二、Quantifiers

Java正则表达式API还允许我们使用Quantifiers。通过指定匹配的出现次数,我们可以进一步调整匹配的行为。

要匹配零次或一次文本,我们使用量词:

@Test
public void givenZeroOrOneQuantifier_whenMatches_thenCorrect() {
    int matches = runTest("\\a?", "hi");
 
    assertEquals(matches, 3);
}

或者,我们可以使用大括号语法,Java regex API也支持这种语法:

@Test
public void givenZeroOrOneQuantifier_whenMatches_thenCorrect2() {
    int matches = runTest("\\a{0,1}", "hi");
 
    assertEquals(matches, 3);
}

本例介绍了零长度匹配的概念。碰巧的是,如果一个量词的匹配阈值为零,它总是匹配文本中的所有内容,包括每个输入末尾的一个空字符串。这意味着即使输入为空,它也将返回一个零长度匹配。

这就解释了为什么在上面的示例中,尽管字符串长度为2,但我们仍得到3个匹配项。第三个匹配项是长度为零的空字符串。

为了匹配零次或无限次的文本,我们使用*量词,它与?:

@Test
public void givenZeroORManyQuantifier_whenMatches_thenCorrect() {
     int matches = runTest("\\a*", "hi");
 
     assertEquals(matches, 3);
}

支持的替代方案:

@Test
public void givenZeroOrManyQuantifier_whenMatches_thenCorrect2() {
    int matches = runTest("\\a{0,}", "hi");
 
    assertEquals(matches, 3);
}

差异量词为+,匹配阈值为1。如果所需的字符串根本不出现,则将不存在匹配项,甚至不存在长度为零的字符串:

@Test
public void givenOneOrManyQuantifier_whenMatches_thenCorrect() {
    int matches = runTest("\\a+", "hi");
 
    assertFalse(matches);
}

支持的替代方案:

@Test
public void givenOneOrManyQuantifier_whenMatches_thenCorrect2() {
    int matches = runTest("\\a{1,}", "hi");
 
    assertFalse(matches);
}

正如在Perl和其他语言中一样,大括号语法可用于多次匹配给定文本:

@Test
public void givenBraceQuantifier_whenMatches_thenCorrect() {
    int matches = runTest("a{3}", "aaaaaa");
 
    assertEquals(matches, 2);
}

在上面的例子中,我们得到了两个匹配项,因为只有当a在一行中出现三次时,才会出现匹配项。但是,在下一次测试中,我们不会得到匹配,因为文本在一行中只出现两次:

@Test
public void givenBraceQuantifier_whenFailsToMatch_thenCorrect() {
    int matches = runTest("a{3}", "aa");
 
    assertFalse(matches > 0);
}

当我们在大括号中使用范围时,匹配将是贪婪的,从范围的高端匹配:

@Test
public void givenBraceQuantifierWithRange_whenMatches_thenCorrect() {
    int matches = runTest("a{2,3}", "aaaa");
 
    assertEquals(matches, 1);
}

我们已经指定了至少两次但不超过三次,所以我们得到一个匹配,匹配者看到一个aaa和一个无法匹配的a

然而,API允许我们指定一种懒惰或不情愿的方法,以便匹配器可以从范围的低端开始,在这种情况下,匹配两个匹配项aa和aa:

@Test
public void givenBraceQuantifierWithRange_whenMatchesLazily_thenCorrect() {
    int matches = runTest("a{2,3}?", "aaaa");
 
    assertEquals(matches, 2);
}

三、Capturing Groups

API还允许我们通过Capturing Groups将多个角色视为一个单元。它会将数字附加到Capturing Groups,并允许使用这些数字进行反向引用。

在本节中,我们将看到一些关于如何在Java正则表达式API中使用Capturing Groups的示例。

让我们使用一个仅当输入文本包含两个相邻数字时才匹配的Capturing Groups:

@Test
public void givenCapturingGroup_whenMatches_thenCorrect() {
    int Maches = runTest("(\\d\\d)", "12");
 
    assertEquals(matches, 1);
}

上面匹配的数字是1,使用back引用告诉匹配者我们想要匹配文本匹配部分的另一个匹配项。这样做,而不是:

@Test
public void givenCapturingGroup_whenMatches_thenCorrect2() {
    int matches = runTest("(\\d\\d)", "1212");
 
    assertEquals(matches, 2);
}

如果输入有两个单独的匹配项,我们可以有一个匹配项,但使用反向引用传播相同的正则表达式匹配项以跨越输入的整个长度:

@Test
public void givenCapturingGroup_whenMatchesWithBackReference_
  thenCorrect() {
    int matches = runTest("(\\d\\d)\\1", "1212");
 
    assertEquals(matches, 1);
}

我们必须重复正则表达式,而无需反向引用,才能获得相同的结果:

@Test
public void givenCapturingGroup_whenMatches_thenCorrect3() {
    int matches = runTest("(\\d\\d)(\\d\\d)", "1212");
 
    assertEquals(matches, 1);
}

类似地,对于任何其他重复次数,反向引用可以使匹配者将输入视为单个匹配:

@Test
public void givenCapturingGroup_whenMatchesWithBackReference_
  thenCorrect2() {
    int matches = runTest("(\\d\\d)\\1\\1\\1", "12121212");
 
    assertEquals(matches, 1);
}

但如果你甚至改变了最后一个数字,匹配就会失败:

@Test
public void givenCapturingGroupAndWrongInput_
  whenMatchFailsWithBackReference_thenCorrect() {
    int matches = runTest("(\\d\\d)\\1", "1213");
 
    assertFalse(matches > 0);
}

重要的是不要忘记转义反斜杠,这在Java语法中至关重要。

到此这篇关于Java正则表达式API字符类的文章就介绍到这了,更多相关Java正则表达式 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java正则表达式API字符类

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

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

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

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

下载Word文档
猜你喜欢
  • Java正则表达式API字符类
    目录一、Predefined字符类二、Quantifiers三、Capturing Groups一、Predefined字符类 Java正则表达式API也接受预定义的字符类。上面的一...
    99+
    2022-11-13
  • Java字符串 正则表达式详解
    目录一、规则表1.字符2.字符类 .3.边界匹配符4.逻辑操作符5.量词二、Pattern类1.Pattern类的实例获取—compile方法2.split方法3.Pattern中匹...
    99+
    2022-11-12
  • 正则表达式字符组/元字符/量词
    一.正则表达式能干什么   1.从大段的文字中找到符合规则的内容   2.判断某个字符串是否完全符合规则 二.字符组-- [] 写在中括号中的内容,都出现在下面的某一个字符的位置上都是符合规则的    [0-9] 匹配数字   [a-z]...
    99+
    2023-01-31
    字符 量词 正则表达式
  • Java正则表达式循环匹配字符串方式
    目录正则表达式循环匹配字符串Java匹配正则表达式大全我们先举个例子来看看Java匹配正则表达式匹配表达式的特殊情况正则表达式循环匹配字符串 public static void m...
    99+
    2022-11-13
  • 正则表达式字符集是什么
    这篇文章主要为大家展示了“正则表达式字符集是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“正则表达式字符集是什么”这篇文章吧。正则表达式字符集是由一对方括号“[]”括起来的正则表达式字符集合...
    99+
    2023-06-17
  • Java正则表达式API边界匹配
    目录Boundary MatchersPattern Class MethodsPattern.CANON_EQPattern.CASE_INSENSITIVEPattern.COM...
    99+
    2022-11-13
  • Java正则表达式APIMatcher类方法
    目录一、Pattern.DOTALL二、Pattern.LITERAL三、Pattern.MULTILINE四、Matcher类方法索引方法Study方法Replacement方法一...
    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正则表达式提取key-value类型字符值代码实例
    目录背景方括号表达式(用于确定取值范围):预定义字符匹配符:次数匹配符:边界匹配符:代码实例 1、分组2、惰性匹配和贪婪匹配3、分割符4、结束符总结背景 本人最近半年参与过...
    99+
    2022-11-13
  • java学习指南之字符串与正则表达式
    目录String构造方法格式控制字符串常用方法StringBuilder与StringBuffer特点理解可变与不可变字符串拼接方法字符串删除方法字符串内插入字符字符串替换方法字符串...
    99+
    2023-05-18
    java 字符串正则 java中正则表达式 java字符串与正则表达式
  • 怎么使用java正则表达式获取字符串
    要使用Java正则表达式获取字符串,可以按照以下步骤进行操作:1. 导入`java.util.regex`包。在Java中,正则表达...
    99+
    2023-09-05
    java
  • mysql字符串正则表达式及说明
    目录概述正则表达式运算符正则表达式语法概述 名称描述NOT REGEXP否定的REGEXPREGEXP字符串是否匹配正则表达式RLIKE字符串是否匹配正则表达式 正则表达式是指定复杂...
    99+
    2022-11-13
  • Python正则表达式的字符有哪些
    本篇内容主要讲解“Python正则表达式的字符有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python正则表达式的字符有哪些”吧!对于许多需要处理文本来说的技术工程师,必须对Python...
    99+
    2023-06-17
  • mysql 正则表达式 提取 指定字符
    目录 1.REGEXP 正则表达式2.REGEXP_REPLACE3.补充参考链接 1.REGEXP 正则表达式 # 查找字段中包含数字和字母的所有记录 SELECT 字段1 FROM 表1 where 字段1 R...
    99+
    2023-08-25
    mysql 正则表达式 数据库
  • java 判断字符串中有汉字 (常用正则表达式)
    今天在开发中碰到了判断字符串中是否有汉字的问题,方便起见,记录下来以便后期查看。 通过正则表达式判断 判断汉字 String address = "北京市朝阳区阜通东大街6号";String lonAndLat = "";Pattern p...
    99+
    2023-09-14
    正则表达式 java
  • Java正则表达式 Pattern 类的用法
    Pattern 类是 Java 正则表达式中的一个重要类,它用于创建一个正则表达式模式对象。Pattern 类的常用方法如下:1. ...
    99+
    2023-09-07
    Java
  • 怎么使用java正则表达式去除特殊字符
    使用Java正则表达式去除特殊字符可以使用String类的replaceAll方法。以下是一个示例代码:```javapublic class Main {public static void main(String[] args) {...
    99+
    2023-08-09
    java
  • SqlServer类似正则表达式的字符处理是怎样的
    SqlServer类似正则表达式的字符处理是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。SQL Serve提供了简单的字符模糊匹配功能...
    99+
    2022-10-19
  • 正则表达式不包含特定字符串
    要实现一个正则表达式不包含特定字符串的模式,可以使用“负向预查”来实现。负向预查是一种零宽度断言,可以在匹配之前或之后断言某个位置不...
    99+
    2023-08-18
    正则表达式
  • python利用正则表达式提取字符串
    前言 正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串。日志分析会遇到这种情况,下面我会分别讲一下对应的方法。...
    99+
    2022-06-04
    字符串 正则表达式 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作