文章目录
1 正则表达式的规则
1.1 字符
- x表示字符x,举例:a表示字符a
- \\ 反斜线字符
- \n 换行
- \r 回车
1.2 字符类
- [abc] a、b 或 c
- [^abc] 任何字符,除了a、b 或 c
- [a-zA-Z] a到z,A到Z,包括两头字母
- [0-9] 0到9的字符都包括
1.3 预定义字符
- . 任何字符,\\. 表示 . 本身
- \d 数字:[0,9]
- \w 单词字符:[a-zA-Z_0-9]
1.4 边界匹配器
- ^ 行的开头
- $ 行的结尾
- \b 单词边界
1.5 数量词
- X? X出现0次或者1次
- X* X出现0次或者1次或者多次
- X+ X出现1次或者多次
- X{n} X恰好出现n次
- X{n, } X至少出现n次
- X{n,m} X至少出现n次,但不超过m次
2 正则表达式的功能及代码示例
2.1 功能
-
判断功能
public boolean matches(String regex)
-
分割功能
public String[] split(String regex)
-
替换功能
public String replaceAll(String regex,String replacement)
-
获取功能
Pattern类和Matcher类的使用
2.2 判断功能代码示例
2.2.1 校验手机号
//校验手机号
//要求:手机号11位;第二位数字不能是"2"
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号:");
String phoneNumber = sc.nextLine();
if (phoneNumber.matches("1[3-9]\\d{9}")) {
System.out.println("Legal input");
}
else{
System.out.println("Illegal input");
}
2.2.2 校验邮箱号
//校验邮箱号
//@前至少有2位,域名最多两层,例如:xxxx@xx.xxx.xx 或者 xx@xx.xxx
Scanner sc = new Scanner(System.in);
System.out.println("请输入邮箱号:");
String emailNumber = sc.nextLine();
if (emailNumber.matches("\\w{2,}@\\w{2,}(\\.\\w{2,}){1,2}")) {
System.out.println("Legal input");
}
else{
System.out.println("Illegal input");
}
2.3 分割功能代码示例
2.3.1 判断相亲对象年龄是否符合
Scanner sc = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = sc.nextInt();
String rangeOfAge = "23-28";
String[] strArray = rangeOfAge.split("-");
int startAge = Integer.parseInt(strArray[0]);
int endAge = Integer.parseInt(strArray[1]);
if (age>=startAge && age<=endAge) {
System.out.println("交个朋友吧!");
}
else {
System.out.println("对不起,其实我是被逼着来相亲的");
}
2.3.2 分割中间是多个空格的字符串
String s = "12 re rt g3";
String[] strArray = s.split(" +");
for (String ss : strArray) {
System.out.println(ss);
}
2.3.3 分割盘符路径
//盘符上的路径,要用\\代替、
String s = "C:\\Users\\12714\\Desktop\\Markdown笔记";
String[] strArray = s.split("\\\\");
for (String ss : strArray) {
System.out.println(ss);
}
2.3.4 给字符串中的数字内容排序
//需要排序的字符串
String s = "58 96 14 3 58 75 32 14 56 98";
//将字符串分割,形成一个字符串数组
String[] strArray = s.split(" ");
//把字符串数组变成一个int数组
int[] intArray = new int[strArray.length];
for (int i = 0; i < strArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
//对数组排序
Arrays.sort(intArray);
//把int数组转成字符串
StringBuilder stringBuilder = new StringBuilder();
for (int i : intArray) {
stringBuilder.append(i).append(" ");
}
//去掉字符串尾部空格并输出
System.out.println(stringBuilder.toString().trim());
2.4 替换功能代码示例
String s = "fji68907897ia2234ipfji4fjdi643o226673";
//去除字符串中的所有数字,并用*代替
String ss = s.replaceAll("\\d","*");
System.out.println(ss);
//去除字符串中的所有数字
String sss = s.replaceAll("\\d","");
System.out.println(sss);
2.5 获取功能代码示例
String regex = "a*b";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("aaaab,qwrtaab,3tttgweefab");
while (m.find()) {
System.out.println(m.group());
}