iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在正确的在JAVA中使用正则表达式
  • 303
分享到

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

2023-06-06 18:06:30 303人浏览 薄情痞子
摘要

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

这篇文章给大家介绍如何在正确的在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中使用正则表达式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在正确的在JAVA中使用正则表达式

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL怎么更新字段长度
    要更新MySQL表中的字段长度,可以使用ALTER TABLE语句。以下是更新字段长度的示例: ALTER TABLE table_...
    99+
    2024-05-14
    mysql
  • sql如何修改表字段长度
    要修改表字段的长度,可以使用ALTER TABLE语句,然后使用MODIFY COLUMN来修改字段的长度。以下是一个示例: ALT...
    99+
    2024-05-14
    sql
  • mysql数据量太大如何解决
    有几种方法可以解决MySQL数据量过大的问题: 数据库分区:将数据库表按照某种规则进行分区,分成多个小表,可以提高查询速度和管理...
    99+
    2024-05-14
    mysql
  • MySQL单表数据量过大如何解决
    在MySQL中,当单表的数据量过大时,可以采取以下几种方法来解决问题: 使用索引:在表的字段上创建适当的索引,可以提高查询效率,...
    99+
    2024-05-14
    mysql
  • mysql导出数据量过大如何解决
    当导出的数据量过大时,可以尝试以下方法来解决问题: 使用数据库工具:使用数据库管理工具如Navicat或MySQL Workbe...
    99+
    2024-05-14
    mysql
  • mysql中log_bin的作用是什么
    在MySQL中,log_bin是二进制日志文件的名称,用于记录所有对数据库进行更改的操作,如插入、更新、删除等。这些二进制日志文件可...
    99+
    2024-05-14
    mysql
  • mysql中log_bin的特点有哪些
    log_bin是MySQL的二进制日志文件,用于记录所有对数据库的修改操作,包括插入、更新、删除等。 log_bin文件是M...
    99+
    2024-05-14
    mysql
  • mysql rpm包安装的方法是什么
    要在Linux系统上安装MySQL RPM包,可以按照以下步骤操作: 下载MySQL的RPM包:你可以从MySQL官方网站下载适...
    99+
    2024-05-14
    mysql
  • mysql rpm包安装后怎么使用
    安装MySQL RPM包后,您可以通过以下步骤来使用MySQL: 启动MySQL服务:使用以下命令来启动MySQL服务: sud...
    99+
    2024-05-14
    mysql
  • lxml中怎么处理XML命名空间默认值
    在lxml中处理XML命名空间的默认值可以通过使用xpath()方法和register_namespace()方法来实现。...
    99+
    2024-05-14
    lxml
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作