☰
学习正则表达式的用法(java)~
2026/10/15 13:38:29 网站建设 项目流程

一、学习如何使用mathes()

1、可以用字符串.matches(正则表达式),例如"Java".matches("J[ae]va")

2、也可以使用Matcher对象的matches(),先导入两个包,

import java.util.regex.Pattern; import java.util.regex.Matcher;

写好你的正则表达式,例如匹配邮箱的正则表达式

private static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";

通过Pattern对象来接收Pattern.compile(EMAIL_REGEX)的预编译结果

private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);

把Pattern对象通过matcher(email)转化为Matcher 对象,并调用matches(),返回true 或者 false

Matcher matcher = EMAIL_PATTERN.matcher(email); return matcher.matches();

二、认识和学习正则表达式的符号和用法

注:以上绝大多数都是正确的,但有少部分错误需要指出

"J?a"匹配"J\p{P}a" "J1a"不匹配"J\p{P}a"

1、先说一下三种括号的含义:()意味着分组,把好好几个字符分成一组(包含了顺序); [ ]只能表示原字符串的一个字符,但可以往里面加字符,如[abc]表示a或b或c,与()不同,()想表示或必须加|,如(a|b|c),{ }主要表示前面的正则表达式里的字符的个数,如a{1,5}表示出现1~4个a;a{1,}表示至少出现1次a,与a+语义相同;a{0.1}表示a出现0次或者1次,与a?语义相同。

2、再来讲一下,正则表达式里大概有这么三种角色,第一种就是指定好范围的字符,例如:

"java"匹配"java"或"j[ae]va"或"j(av)a"或j[a-z]va或"j[^es]va"或"j[a-bc-d]va";第二种就是在第一种的基础上对与一些做了简化如:"java1"匹配"java[0-9]"现在直接可以写成"java[\\d]";第三种如+ * ?{},这些相当与语文中的定语一样的角色,只不过是后置定语,用来修饰前面的单个字符、一个组。

三、举个例子吧

1、匹配合法的手机号

规则:必须是11位数字;必须以1开头;第二位必须是3、2、7、8中的任意一个;后面跟着9位数字。

正则表达式可以这么写:^1[3278][//d]{9}$

2、匹配标准日期格式

规则:格式必须是年-月-日,用短横线-分隔;年份:4位数字,范围1900~2099;月份2位数字,01~12;日期:2位数字,01~31(不要求校验每月实际天数,只要格式对就行);前后不能有其他字符

正则表达式可以这么写:^(20|19)[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$

四、使用正则表达式来查找(Pattern+Matcher)

import java.util.regex.Pattern; import java.util.regex.Matcher; public class ex5_1 { public static void main(String[] args) { String text="张三13812345678李四17799887766王五15000000000"; Pattern pattern=Pattern.compile("1[3578][\\d]{9}"); Matcher matcher=pattern.matcher(text); while(matcher.find()){ System.out.println(matcher.group()); } } }

五、替换

public static void main(String[] args){ //手机号打码 String text="我的电话是13812345678"; String masked=text.replaceAll("(1[3578][\\d])[\\d]{4}([\\d]{4})","$1****$2"); System.out.println(masked); //日期格式转换 YYYY-MM-DD ->DD/MM/YYYY String date="今天是2024-03-15"; String result=date.replaceAll("([\\d]{4})-([\\d]{2})-([\\d]{2})","$3/$2/$1"); System.out.println(result); }

其中$1、$2、$3 为对正则表达式里打小括号的引用,没打小括号就不会被捕获到,不会被引用

六、分割

public static void main(String[] args){ String text="你好!世界?我是XXX"; String[] parts=text.split("[!?.]"); for(String i:parts){ System.out.println(i); } String text2="a b \t c\n \r d"; String[] parts2=text2.split("\\s+"); for (String i:parts2) { System.out.println(i); } } }
public static void main(String[] args){ //按大写字母分割 String text="WoShiDaShuaiBi"; String[] parts=text.split("(?=[A-Z])"); for(String i:parts) { System.out.println(i); } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询