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

  介绍

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

JAVA是什么

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

正则表达式语法

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

<强>[]

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

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

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

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

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

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

<强>{}

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

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

<强>()

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

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

JAVA写法

<强>模板

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

<强>例子

<强>描述

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

username@domain-yyyy-mm-dd

例:lethean@buaa.edu.cn - 2020 - 12 - 02 username@domain-yyyy-mm-dd-hh

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

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

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

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

例:名字,lethean@buaa.edu.cn - 2020 - 12 - 20 - 15:01:20

其中

username@domain为

邮件发送者的邮箱地址

用户名为用户名,域名为域名
yyyy-mm-dd/yyyy-mm-dd-hh/yyyy-mm-dd-hh:咪咪/yyyy-mm-dd-hh:咪咪:ss为

发送时间

' y # 39;代表一位年份数字,“猴# 39;代表一位月份数字,‘d # 39;代表一位日期数字,”h # 39;代表一位小时数字,mi # 39;代表一位分钟数字,‘& # 39;代表一位秒数数字
用户名为只包含大小写字母,——的长度不为零的字符串,对于大小写不敏感。

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

<强>写法

String  pattern =,“(? & lt; username> [A-Za-z -] +) @ (? & lt; domain> [A-Za-z0-9] +) - (? & lt; yyyy> \ \ d {4})——(? & lt; mm> \ \ d {2})——(? & lt; dd> \ \ d {2}) (-) ? (? & lt; hh> \ \ d {2}) ? (:) ? (? & lt; mimi> \ \ d {2}) ? (:) ? (? & lt; ss> \ \ d {2}) ?“;   String 才能;text =,“名字——lethean@buaa.edu.cn - 2020 - 12 - 20 - 15:01:20";   Pattern 才能;r =, Pattern.compile(模式);   Matcher 才能;Matcher =, r.matcher(文本);   if 才能;(matcher.find ()), {   ,,System.out.println(“用户名:“+ matcher.group (“username"));   ,,System.out.println(“域:“+ matcher.group (“domain"));   ,,System.out.println (“yyyy:“+ matcher.group (“yyyy"));   ,,System.out.println (“mm:“+ matcher.group (“mm"));   ,,System.out.println(“弟弟:“+ matcher.group (“dd"));   ,,System.out.println (“hh:“+ matcher.group (“hh"));   ,,System.out.println(“咪咪:“+ matcher.group (“mimi"));   ,,System.out.println (“ss:“+ matcher.group (“ss"));   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

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