我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在Java中使用正则表达式API

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在Java中使用正则表达式API

前言:

在正则表达式的世界中,有许多不同的风格可供选择,比如grep、Perl、Python、PHP、awk等等。这意味着在一种编程语言中工作的正则表达式可能在另一种编程语言中不工作。Java中的正则表达式语法与Perl中的最相似。要在Java中使用正则表达式,我们不需要任何特殊设置。JDK包含一个特殊的java包java.util.regex完全致力于regex。我们只需要将其导入到我们的代码中。此外,java.lang.String类还具有我们在代码中常用的内置正则表达式支持。

Java正则表达式包

 java.util.regex包由三个类组成:PatternMatcherPatternSyntaxException

  • Pattern模式对象是一个已编译的正则表达式。Pattern类不提供公共构造函数。要创建一个模式,我们必须首先调用它的一个公共静态编译方法,然后该方法将返回一个模式对象。这些方法接受正则表达式作为第一个参数。
  • Matcher对象解释模式并对输入字符串执行匹配操作。它也没有定义公共构造函数。我们通过调用模式对象上的Matcher方法来获得Matcher对象。
  • PatternSyntaxException对象是一个未经检查的异常,它指示正则表达式模式中的语法错误。

我们必须首先了解正则表达式是如何在Java中构造的。

如果你已经从不同的环境中熟悉了正则表达式,你可能会发现某些差异,但它们是最小的。

简单的例子

让我们从正则表达式的最简单用例开始。如前所述,当正则表达式应用于字符串时,它可能会匹配零次或多次。

java支持的最基本的模式匹配形式。java.util.regex正则表达式API是字符串文本的匹配。例如,如果正则表达式为foo,输入字符串为foo,则匹配将成功,因为字符串相同:

@Test
public void givenText_whenSimpleRegexMatches_thenCorrect() {
    Pattern pattern = Pattern.compile("foo");
    Matcher matcher = pattern.matcher("foo");
 
    assertTrue(matcher.find());
}

我们首先通过调用其静态编译方法并向其传递我们想要使用的模式来创建一个Pattern对象。

然后我们创建一个Matcher对象,调用Pattern对象的Matcher方法,并将要检查匹配的文本传递给它。

之后,我们在Matcher对象中调用find方法。

find方法在输入文本中不断前进,并为每个匹配返回true,因此我们也可以使用它来查找匹配计数:

@Test
public void givenText_whenSimpleRegexMatchesTwice_thenCorrect() {
    Pattern pattern = Pattern.compile("foo");
    Matcher matcher = pattern.matcher("foofoo");
    int matches = 0;
    while (matcher.find()) {
        matches++;
    }
 
    assertEquals(matches, 2);
}

由于我们将运行更多的测试,我们可以抽象出在一个名为runTest的方法中查找匹配数的逻辑:

public static int runTest(String regex, String text) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(text);
    int matches = 0;
    while (matcher.find()) {
        matches++;
    }
    return matches;
}

当我们得到0个匹配项时,测试应该失败,否则应该通过。

Meta Characters元字符

元字符会影响模式匹配的方式,从而为搜索模式添加逻辑。JavaAPI支持多个Meta Characters,最简单的是“.”匹配任何字符:

@Test
public void givenText_whenMatchesWithDotMetach_thenCorrect() {
    int matches = runTest(".", "foo");
    
    assertTrue(matches > 0);
}

考虑到前面的例子,其中regex-foo匹配文本foo和foo两次。如果我们在正则表达式中使用点元字符,那么在第二种情况下,我们不会得到两个匹配:

@Test
public void givenRepeatedText_whenMatchesOnceWithDotMetach_thenCorrect() {
    int matches= runTest("foo.", "foofoo");
 
    assertEquals(matches, 1);
}

注意正则表达式中foo后面的点。匹配器匹配前面有foo的每个文本,因为最后一个点部分表示后面的任何字符。因此,在找到第一个foo之后,其余的被视为任何角色。这就是为什么只有一场比赛。

该API支持其他几个元字符<([{\^-=$!|]})?*+.>我们将在本文中进一步探讨。

Character类

浏览官方模式类规范,我们将发现受支持的正则表达式构造的摘要。在Character类下,我们有大约6个结构。

OR

构造为[abc]。集合中的任何元素都是匹配的:

@Test
public void givenORSet_whenMatchesAny_thenCorrect() {
    int matches = runTest("[abc]", "b");
 
    assertEquals(matches, 1);
}

如果它们都出现在文本中,则每一个单独匹配,不考虑顺序:

@Test
public void givenORSet_whenMatchesAnyAndAll_thenCorrect() {
    int matches = runTest("[abc]", "cab");
 
    assertEquals(matches, 3);
}

它们也可以作为字符串的一部分进行替换。在下面的示例中,当我们通过将第一个字母与集合中的每个元素交替来创建不同的单词时,它们都是匹配的:

@Test
public void givenORSet_whenMatchesAllCombinations_thenCorrect() {
    int matches = runTest("[bcr]at", "bat cat rat");
 
    assertEquals(matches, 3);
}

NOR

通过添加插入符号作为第一个元素来否定上述集合:

@Test
public void givenNORSet_whenMatchesNon_thenCorrect() {
    int matches = runTest("[^abc]", "g");
 
    assertTrue(matches > 0);
}

另外一个例子:

@Test
public void givenNORSet_whenMatchesAllExceptElements_thenCorrect() {
    int matches = runTest("[^bcr]at", "sat mat eat");
 
    assertTrue(matches > 0);
}

Range类

我们可以定义一个类,该类使用连字符(-)指定匹配文本应该落在的范围内,同样,我们也可以否定一个范围。

匹配大写字母:

@Test
public void givenUpperCaseRange_whenMatchesUpperCase_
  thenCorrect() {
    int matches = runTest(
      "[A-Z]", "Two Uppercase alphabets 34 overall");
 
    assertEquals(matches, 2);
}

匹配小写字母:

@Test
public void givenLowerCaseRange_whenMatchesLowerCase_
  thenCorrect() {
    int matches = runTest(
      "[a-z]", "Two Uppercase alphabets 34 overall");
 
    assertEquals(matches, 26);
}

匹配大小写字母:

@Test
public void givenBothLowerAndUpperCaseRange_
  whenMatchesAllLetters_thenCorrect() {
    int matches = runTest(
      "[a-zA-Z]", "Two Uppercase alphabets 34 overall");
 
    assertEquals(matches, 28);
}

匹配范围:

@Test
public void givenNumberRange_whenMatchesAccurately_
  thenCorrect() {
    int matches = runTest(
      "[1-5]", "Two Uppercase alphabets 34 overall");
 
    assertEquals(matches, 2);
}

匹配另外的数字范围:

@Test
public void givenNumberRange_whenMatchesAccurately_
  thenCorrect2(){
    int matches = runTest(
      "[30-35]", "Two Uppercase alphabets 34 overall");
 
    assertEquals(matches, 1);
}

Union类

union字符类是两个或多个字符类组合的结果:

@Test
public void givenTwoSets_whenMatchesUnion_thenCorrect() {
    int matches = runTest("[1-3[7-9]]", "123456789");
 
    assertEquals(matches, 6);
}

上述测试将只匹配9个整数中的6个,因为并集跳过4、5和6。

Intersection类

与union类类似,该类是在两个或多个集合之间拾取公共元素的结果。要应用交叉点,我们使用&&:

@Test
public void givenTwoSets_whenMatchesIntersection_thenCorrect() {
    int matches = runTest("[1-6&&[3-9]]", "123456789");
 
    assertEquals(matches, 4);
}

我们得到4个匹配,因为两个集合的交集只有4个元素。

Subtraction类

我们可以使用减法对一个或多个字符类求反,例如匹配一组奇数十进制数:

@Test
public void givenSetWithSubtraction_whenMatchesAccurately_thenCorrect() {
    int matches = runTest("[0-9&&[^2468]]", "123456789");
 
    assertEquals(matches, 5);
}

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在Java中使用正则表达式API

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

下载Word文档

猜你喜欢

如何在Java API中使用正则表达式

如何在Java API中使用正则表达式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、正则表达式的理论基础1、普通字符的表示我们说正则表达式主要由普通字符和元
2023-05-31

怎么在Java中使用正则表达式API

本文小编为大家详细介绍“怎么在Java中使用正则表达式API”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在Java中使用正则表达式API”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言:在正则表达式的世
2023-07-02

正则表达式如何在java中使用

正则表达式如何在java中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java中正则表达式运用实例(参看java中正则表达式运用详解):测试代码 pack
2023-05-31

如何在正确的在JAVA中使用正则表达式

这篇文章给大家介绍如何在正确的在JAVA中使用正则表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。
2023-06-06

正则表达式如何在Java项目中使用

本篇文章为大家展示了正则表达式如何在Java项目中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.常用正则表达式规则正则表达式语法 一个或多个汉字^[\u0391-\uFFE5]+$ 邮政编
2023-05-31

java如何使用正则表达式

Java中使用正则表达式需要使用java.util.regex包中的相关类和方法。以下是使用正则表达式的基本步骤:1. 创建正则表达式:使用字符串表示正则表达式,可以使用特殊字符和符号来定义匹配规则。2. 编译正则表达式:使用Pattern
2023-09-26

正则表达式如何正确在Java项目中使用

这篇文章将为大家详细讲解有关正则表达式如何正确在Java项目中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.匹配验证-验证Email是否正确public static void ma
2023-05-31

如何在MySQL中使用正则表达式

在MySQL中,可以使用正则表达式来对字符串进行匹配和筛选。以下是使用正则表达式的一些常见语法:使用REGEXP关键字进行匹配:SELECT * FROM table_name WHERE column_name REGEXP '
如何在MySQL中使用正则表达式
2024-04-09

如何在python中使用正则表达式

本篇内容主要讲解“如何在python中使用正则表达式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在python中使用正则表达式”吧! 一、前言我们在做接口自动化的时候,处理接口依赖的相关数
2023-06-16

如何在vbscript中使用正则表达式

本篇文章为大家展示了如何在vbscript中使用正则表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。vbs中的正则表达式假定要搜索的字符串是 str="hello world Hello Wor
2023-06-08

如何在dreamweaver中使用正则表达式

本篇文章为大家展示了如何在dreamweaver中使用正则表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、当我们在用dreamweaver中编码的时候,用一般的查找替换不能满足我们大批量的替
2023-06-08

如何在EXCEL中使用正则表达式

如何在EXCEL中使用正则表达式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、需求比如,我要拆分下面的字符串:显然这样的需求,用正则表达式再合适不过了。二、解决步骤下面我们
2023-06-14

在python正则表达式中是怎样正确使用正则表达式

这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python
2023-06-17

Java中正则表达式的使用

正则表达式 什么是正则表达式 Regular Expression , 正则表达式, ⼀种使⽤表达式的⽅式对字符串 进⾏匹配的语法规则由一组持有特殊含义的字符串组成,通常用于匹配和替换文本正则的优点: 速度快, 效率⾼, 准确性⾼正则的缺点
2023-08-17

java中如何使用正则表达式中的组

这篇文章主要介绍java中如何使用正则表达式中的组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!组是括号划分的正则表达式,可以根据组的编号来引用某个组。组号为0表示整个表达式,组号1表示从左到右被第一个括号扩起的组,
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录