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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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

这篇文章给大家介绍如何在正确的在JAVA中使用正则表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Java是什么

Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。

正则表达式语法

最简单的正则表达式就是字符串,比如hello world也是一个正则表达式,匹配"hello world"字符串。在这基础上我们加入其他符号表示,以满足我们匹配一定格式的字符串而不是与正则表达式一模一样的字符串,这些符号可以大致分为[]、{}、(),而其他的一些符号(如.,+,*,\\d等等)其实都可以认为是他们的简写形式。

[]

[]表示匹配一个在[]中包含的任一字符,如[abc]表示匹配a或者b或者c。

可以使用-来表示一个字符区间,[a-c]与[abc]是等效的;同时可以写多个区间,也可以写完区间后再加入字符,如[a-z0-9A]表示匹配a-z或者0-9或者A中的任一字符;

可以使用^来取补集,即[^a-c]表示匹配除了abc的其他任何字符、[^0-9]表示匹配除了数字的任何字符、[^a]表示匹配除了a的其他任何字符;

一些与[]等效的简写方法:

简写意义
.匹配除"\r\n"之外的任何单个字符。
\d数字字符匹配。等效于 [0-9]。
\D非数字字符匹配。等效于 [^0-9]。
\s匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
\S匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。
\w匹配任何字类字符,包括下划线。与[A-Za-z0-9_]等效。
\W与任何非单词字符匹配。与[^A-Za-z0-9_]等效。

另外,由于java中**\\** 表示其他语言的一个\,所以上面的在java中均需要写成\\d、\\D等等。

{}

{}表示对其前面的字符或子表达式匹配的次数。

表达式意义
{n}n 是非负整数。正好匹配 n 次。如o{2}匹配两次o
{n,}n 是非负整数。至少匹配 n 次。
{n,m}mn 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。
表达式意义
*零次或多次匹配前面的字符或子表达式,等效于 {0,}。
+一次或多次匹配前面的字符或子表达式, 等效于 {1,}。
?零次或一次匹配前面的字符或子表达式, 等效于 {0,1}。

()

()表示一个捕获组,由此可以使用()来将一个表达式拆分为多个组,实现将一个字符串中需要的信息提取出来。在()中的一开始加入?<name>可以实现对组命名,从而更方便地提取信息。

如(?[A-Za-z]+)表示一个至少由一个字母组成的人名,在获取匹配到的人名时只需要用matcher.group("name")即可得到匹配结果。

JAVA写法

模板

String pattern = "[a-z]+";//正则表达式Pattern r = Pattern.compile(pattern);//将表达式编译Matcher matcher = r.matcher(text);//将text字符串作为匹配的字符串matcher.find();//匹配value1 = matcher.group("value1");//提取信息

例子

描述

根据时间精度的不同,可能出现以下四种认定为正确的邮件信息格式:

username@domain-yyyy-mm-dd

例:lethean@buaa.edu.cn-2020-12-02

username@domain-yyyy-mm-dd-hh

例:myname-lethean@buaa.edu.cn-2020-12-02-15

username@domain-yyyy-mm-dd-hh:mimi

例:Lethean@buaa.edu.cn-2020-12-02-15:01

username@domain-yyyy-mm-dd-hh:mimi:ss

例:myname--lethean@buaa.edu.cn-2020-12-20-15:01:20

其中

username@domain 为

邮件发送者的邮箱地址

username 为用户名,domain 为域名
yyyy-mm-dd / yyyy-mm-dd-hh / yyyy-mm-dd-hh:mimi / yyyy-mm-dd-hh:mimi:ss 为

发送时间

‘y' 代表一位年份数字,‘m' 代表一位月份数字,‘d' 代表一位日期数字,‘h' 代表一位小时数字,‘mi' 代表一位分钟数字,‘s' 代表一位秒数数字
username 为只包含大小写字母、- 的长度不为零的字符串,对于大小写不敏感。

domain 为只包含大小写字母、数字、. 的长度不为零的字符串,对大小写敏感。

写法

String pattern = "(?<username>[A-Za-z-]+)@(?<domain>[A-Za-z0-9.]+)-(?<yyyy>\\d{4})-(?<mm>\\d{2})-(?<dd>\\d{2})(-)?(?<hh>\\d{2})?(:)?(?<mimi>\\d{2})?(:)?(?<ss>\\d{2})?";  String text = "myname--lethean@buaa.edu.cn-2020-12-20-15:01:20";  Pattern r = Pattern.compile(pattern);  Matcher matcher = r.matcher(text);  if (matcher.find()) {   System.out.println("username:"+matcher.group("username"));   System.out.println("domain:"+matcher.group("domain"));   System.out.println("yyyy:"+matcher.group("yyyy"));   System.out.println("mm:"+matcher.group("mm"));   System.out.println("dd:"+matcher.group("dd"));   System.out.println("hh:"+matcher.group("hh"));   System.out.println("mimi:"+matcher.group("mimi"));   System.out.println("ss:"+matcher.group("ss"));  }

将text换成4种格式的邮箱均可得到正确结果,不存在的(hh、mimi、ss可能不存在)则为null。

运行结果如下:

username:myname--lethean
domain:buaa.edu.cn
yyyy:2020
mm:12
dd:20
hh:15
mimi:01
ss:20

如果以第3种格式输入,即text为Lethean@buaa.edu.cn-2020-12-02-15:01时,输出如下:

username:Lethean
domain:buaa.edu.cn
yyyy:2020
mm:12
dd:02
hh:15
mimi:01
ss:null

ss因为在该格式中没有所以为空。

例子改

描述

邮件信息输入格式改为:(ss:mimi:hh-)dd-mm-yyyy-username@domain-place

根据时间精度的不同,可能出现以下四种认定为正确的邮件信息格式:

dd-mm-yyyy-username@domain-place

例:02-12-2020-abc@buaa.edu.cn-Wuhu

hh-dd-mm-yyyy-username@domain-place

例:03-02-12-2020-abc@buaa.edu.cn-wuhu

mimi:hh-dd-mm-yyyy-username@domain-place

例:00:03-02-12-2020-abc@buaa.edu.cn-Wuhu

ss:mimi:hh-dd-mm-yyyy-username@domain-place

例:01:00:03-02-12-2020-abc@buaa.edu.cn-wuhu

place 是新加的域,表示地点,由英文字母组成,对大小写敏感,即 Beijing 和 beijing 视为不一样的地点

写法

String pattern = "(((?<ss>\\d{2}):)?((?<mimi>\\d{2}):))?((?<hh>\\d{2})-)?(?<dd>\\d{2})-(?<mm>\\d{2})-(?<yyyy>\\d{4})-(?<username>[A-Za-z-]+)@(?<domain>[A-Za-z0-9.]+)-(?<place>[A-Za-z]+)";String text = "01:11:03-02-12-2020-abc@buaa.edu.cn-wuhu";Pattern r = Pattern.compile(pattern);Matcher matcher = r.matcher(text);if (matcher.find()) { System.out.println("username:"+matcher.group("username")); System.out.println("domain:"+matcher.group("domain")); System.out.println("yyyy:"+matcher.group("yyyy")); System.out.println("mm:"+matcher.group("mm")); System.out.println("dd:"+matcher.group("dd")); System.out.println("hh:"+matcher.group("hh")); System.out.println("mimi:"+matcher.group("mimi")); System.out.println("ss:"+matcher.group("ss")); System.out.println("place:"+matcher.group("place"));}

注意前面的(((?<ss>\\d{2}):)?((?<mimi>\\d{2}):))?必须为嵌套的形式,否则匹配时会出现把mimi匹配成ss的错误(因为两者的匹配格式相同,先匹配给了ss,但是嵌套之后就不会出现这种情况)。

运行结果如下:

username:abc
domain:buaa.edu.cn
yyyy:2020
mm:12
dd:02
hh:03
mimi:11
ss:01
place:wuhu

如果将text改为11:03-02-12-2020-abc@buaa.edu.cn-wuhu,输出如下,ss不匹配。

username:abc
domain:buaa.edu.cn
yyyy:2020
mm:12
dd:02
hh:03
mimi:11
ss:null
place:wuhu

关于如何在正确的在JAVA中使用正则表达式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

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

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

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

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

下载Word文档

猜你喜欢

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

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

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

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

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

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

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

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

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

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

如何正确的使用awk正则表达式

这篇文章给大家介绍如何正确的使用awk正则表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、模糊匹配:awk ‘{if($3~/97/) print $0} data.f:如果第三项中含有”97”则打印该行awk
2023-06-09

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

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

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

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

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

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

C#开发中如何正确地使用正则表达式

C#开发中如何正确地使用正则表达式,需要具体代码示例正则表达式是一种强大的模式匹配工具,在C#开发中经常被用于字符串操作、数据校验、文本处理等方面。正确地使用正则表达式可以提高代码的效率和可维护性。本文将介绍在C#中正确使用正则表达式的相关
2023-10-22

如何正确的在Java8中使用lambda表达式

如何正确的在Java8中使用lambda表达式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.基本介绍lambda表达式,即带有参数的表达式,为了更清晰地理解lambda
2023-05-31

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

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

目录