一(含义):正则表达式是指一个用来描述或者匹配一系列符合某种语法规则的字符串的单个字符串,其实就是一种规则。
二(常见的正则表达式匹配语法):
\ | 转义字符。 "d"匹配字符"d" ;"\d"匹配数字; "\\"匹配"\" |
^ | 用法1:限定开头。 ^[abc]表示以abc任意一个字母开头 |
用法2:取反。[^abc]表示除了abc以外的任意字符 | |
$ | 结尾标志 |
| | 选择。用来指明两项之间的一个选择。 a|b: 匹配a或者b |
? | [a-z]?表示小写字母1个或者0个 |
* | [a-z]*表示小写字母0个或者多个 |
+ | [a-z]+表示小写字母1个或者多个 |
. | 匹配任意字符 |
{n} | [a-z]{n}表示小写字母恰好n个 |
{n,} | [a-z]{n,}表示小写字母最少n个 |
{n,m} | [a-z]{n,m}表示小写字母最少n个。最多m个 |
\d | 匹配数字0-9 |
\D | 匹配非数字字符 |
\s | 匹配空白字符 |
\S | 匹配非空白字符 |
\w | 匹配单词字符与数字0-9 |
\W | 匹配非单词字符 |
[xyz] | 字符集合。匹配其中任意一个字符 |
[a-z] | 字符范围。匹配指定范围的任意一个字符 |
[a-zA-Z] | 匹配a-z到A-Z |
public class Demo{
public static void main(String[] args) {
String s="111111";
System.out.println(s.matches("\\d\\d\\d\\d"));
String s1="";
System.out.println(s1.matches("[a-z]?"));
String s2="wfasdrrrr";
System.out.println(s2.matches("[a-z]*"));
String s3="aaa";
System.out.println(s3.matches("[a-z]+"));
String s4="Aabcde";
System.out.println(s4.matches("[a-zA-Z]{4,10}"));
}
}
三(String类对正则表达式的支持):
方发声明 | 功能 |
boolean matches(String regex) | 匹配字符串 |
String replaceAll(String regex,String replacement) | 替换字符串 |
String[ ] split(String regex) | 拆分字符串 |
public class Demo1 {
public static void main(String[] args) {
boolean be="3211as1".matches("\\d+");
System.out.println("字符串是否匹配:"+be);
String str="A2B56G78Ju99".replaceAll("\\d+","+");
System.out.println("字符串替换后为:"+str);
String[] s="SDS45D5h87F4".split("\\d+");
System.out.print("字符串拆分后为:");
for (int i=0;i< s.length;i++){
System.out.print(s[i]+" ");
}
}
}
案例( 模拟交友网注册):
1.判定输入的用户名,密码,手机号是否符合规范
2.如果符合规范添加当前用户
package 正则表达式;
import java.util.Arrays;
import java.util.Scanner;
/*
模拟交友网注册
1.判定输入的用户名,密码,手机号是否符合规范
2.如果符合规范添加当前用户
*/
public class Demo3 {
static User[] users={};
public static void main(String[] args) {
System.out.println("----欢迎来到大龄单身交友网-----");
System.out.println("----请注册你的个人信息----");
Scanner scan=new Scanner(System.in);
//用户名的判定
//先接受键盘输入,再判断
String username;
do{
System.out.println("请输入用户名:6-15位数字字母或者_");
username=scan.next();//先接收键盘输入的内容
}while(!username.matches("[A-Za-z0-9_]{6,15}"));//如果符合要求循环结束,不符合,重新接收
String pwd;
do{
System.out.println("请输入密码:6位数字");
pwd=scan.next();
}while(!pwd.matches("\\d{6}"));
String phone;
do{
System.out.println("请输入电话号码");
phone=scan.next();
}while(!phone.matches("^1[3-9][0-9]{9}"));//13 14 15 17 18 16 19
/*
1.循环条件为假则结束循环
2.matches判断满足正则表达式返回true,
因为需要满足正则表达式的时候结束循环,所以需要在方法前面加!
*/
//2.把上述的个人信息添加到User数组中
User u=new User(username,pwd,phone);//创建一个user对象将信息放入对象中
users= Arrays.copyOf(users,users.length+1);//数组扩容
users[users.length-1]=u;//将user对象放入到数组的最后一位
System.out.println(users[users.length-1].toString());
}
}
class User{
String username;
String pwd;
String phone;
//alt+insert
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public User(String username, String pwd, String phone) {
this.username = username;
this.pwd = pwd;
this.phone = phone;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", pwd='" + pwd + '\'' +
", phone='" + phone + '\'' +
'}';
}
}