正则表达式是独立于任何编程语言,大多数的编程语言都支持正则表达式的使用,只要用于字符匹配。
正则有自己的语法:
正则表达式的特点
- 一个正则表达式就是一个描述规则的字符串
- 只要编写正确的语法规则,就可以让正则表达式的引擎去判断目标字符串是否符合规则
- 正则表达式是一套通用的规范,任何语法都适用
- JDK内置了正则表达式引擎,在java.util.regex包内
先看一个例子 :输入一个手机号:
public static void main(String[] args) {
//客户端输入一个手机号 ,验证手机号是否符合规则 1 [3,4,5,6,7,8,9] 9个数字
Scanner sc = new Scanner(System.in);
System.out.println(“请输入手机号:”);
String tel = sc.next();
if(tel.length() != 11){<br /> System.out.println("手机号不符合规则");<br /> }else {<br /> String reg = "^1[3456789]\\d{9}$"; // 1[3-9][0-9]{9}<br /> if(tel.matches(reg)){<br /> System.out.println("手机号满足规则:"+tel);<br /> }else {<br /> System.out.println("手机号不满足规则:"+tel);<br /> }<br /> }<br /> System.out.println("请输入用户名:(用户名不能是数字开始)");<br /> String name = sc.next();<br /> String reg = "^\\D\\w{6,10}";<br /> if(name.matches(reg)) {<br /> System.out.println("OK :"+name);<br /> }else {<br /> System.out.println("No OK :"+name);<br /> }
//判断输入的年份是不是以 20开始 :<br /> String reg1 = "^20[0-9]{2}$"; //20\\d{2}
}
public static void main(String[] args) {
// 判断用户输入的年份是否是20xx年
String year = “2099”;
boolean matches = year.matches(“20[0-9]{2}”);
System.out.println(matches);
// 匹配手机号码"18817382567";<br /> String mobile = "19917382568";<br /> boolean matches2 = mobile.matches("1[3-9]\\d{9}");<br /> System.out.println(matches2?"手机格式正确":"非法的手机号码");
// 匹配年月日格式的字符串 2021-03-16<br /> String date = "2021-10-00";<br /> boolean matches3 = date.matches("\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])");<br /> System.out.println(matches3);
// 邮箱验证<br /> String email = "jack.ma@alibaba.edu";<br /> boolean matches4 = email.matches("[0-9A-Za-z][0-9A-Za-z\\._]*@[a-zA-Z0-9]+\\.(com|edu|cn)");<br /> System.out.println(matches4);<br />}
正则表达式 | 规则 | 可以匹配 |
---|---|---|
a | 指定字符 | a |
\u4e2d | 指定的unicode字符 | 中 |
. | 任意字符 | a,A,$,#,&,! |
\d | 0-9数字 | 0,1,2….9 |
\w | 数字,字母,下划线 | a-z A-Z 0-9 _ |
\s | 空格 Tab键 | “ “ |
\D | 非数字 | A a &#! |
\W | 非\w(非数字,字母,下划线) | !@#¥ |
\S | 非\s (非空格 Tab) | a A & |
AB* | 匹配零个或多个B | A AB ABB ABBB |
AB+ | 匹配一个或多个B | AB ABB ABBB |
AB? | 匹配零个或一个B | A AB |
AB{3} | 让B重复出现3次 | ABBB |
AB{1,3} | 让B至少出现1次,最多出现3次 | AB ABB ABBB |
AB{2,} | 让B至少出现2次 | ABB ABBB ABBBB |
AB{0,3} | 让B最多出现3次 | A AB ABB ABBB |
正则表达式匹配:
把正表达式编译成对象 :
public class TestPattern {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(“请输入手机号:”);
String tel = sc.next();
String reg = “^1[3-9]\d{9}$”;
//创建正则表达式对象
Pattern pattern = Pattern.compile(reg);
//通过和 字符串的 边比较 得到一个匹配对象
Matcher matcher = pattern.matcher(tel);
//利用matcher对象 比较 字符串和正则的匹配
boolean f = matcher.matches();
if(f) {
System.out.println(“OK”);
}else {
System.out.println(“不 OK”);
}
}
}