一小女子深夜跑到某腾T8大佬家要求大佬教JAVA正则表达式的基本使用,快来看看T8是怎么操作的

这篇文章主要给大家介绍了关于JAVA正则表达式的基本使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

正则表达式语法

最简单的正则表达式就是字符串,比如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的其他任何字符;

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


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

{}

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

()

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

如(?[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"));
}

注意前面的(((?\d{2})😃?((?\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正则表达式使用的文章就介绍到这了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值