【JavaSE_学习笔记】正则表达式
正则表达式常用的语法:
A:字符
符号 | 意义 | 注意事项 |
---|---|---|
x | 字符 x :任意的字符 | |
\\ | 反斜线字符 | 在代码中书写正则表达式:——>用两个\代表一个反斜线 |
\t | 制表符 (‘\u0009’) | |
\n | 新行(换行)符 (‘\u000A’) | IO流中要写入换行符号:windows “\r\n” |
\r | 回车符 (‘\u000D’) |
B:字符类
符号 | 意义 |
---|---|
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) :当前字母大小均可 |
C:预定义字符类
符号 | 意义 | 注意事项 |
---|---|---|
. | 任何字符 | 邮箱里面:如果本身就是.,那么在写正在表达式的时候,.将当前.转义 |
\d | 数字:[0-9] | \d在正则表达式应用的时候:[0-9]—>\d |
\w | 单词字符:[a-zA-Z_0-9] | 简单一些字符串,单词字符(规则:数字或者字母) |
D:边界匹配器
符号 | 意义 |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
E:Greedy 数量词
符号 | 意义 |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
举例:
1.校验QQ号码
import java.util.Scanner;
/**
* 需求:校验一个QQ号码
* 定义一个规则:1)由5到10为组成的数字
* 2)不能以0开头
* 分析:
* 1)键盘录入一个QQ号码,使用字符串接收
* 2)定义一个校验QQ的功能
* 3)在main()中调用返回boolean类型
* @author Apple
*/
public class RegexDemo2 {
public static void main(String[] args) {
//创建键盘了录入对象
Scanner sc = new Scanner(System.in) ;
//录入并接收数据
System.out.println("请您输入QQ号码: ");
String QQ = sc.nextLine() ;
boolean flag = checkQQ(QQ) ;
System.out.println("flag: "+flag);
}
public static boolean checkQQ(String qq){
/*//定义正则规则
String regex = "[1-9][0-9]{4,9}" ;
//public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
boolean flag = qq.matches(regex) ;
return flag ;*/
//直接返回
return qq.matches("[1-9]\\d{4,9}");
}
}
2.校验邮箱
import java.util.Scanner;
/**
* 需求:校验邮箱:
* QQ邮箱:
* 919081924@qq.com
* fengqingyang@163.com
* xxxxx@126.com
* zhangsan@westos.com
* lisi@sina.com
* wangwu@istone.com.cn....
* 分析:1)键盘录入邮箱
* 2)定义正则规则
* 3)使用String中的特有功能校验
* 4)输出即可
* @author Apple
*/
public class RegexTest {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//录入并接收
System.out.println("请您输入一个邮箱:");
String email = sc.nextLine() ;
//定义正则规则:本身就是.-->\.--->\\.
// String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z]{2,3})+" ;
String regex = "\\w+@\\w{2,6}(\\.[a-zA-Z]{2,3})+" ;
//校验
boolean flag = email.matches(regex) ;
System.out.println("flag:"+flag);
}
}
String中与正则表达式有关的方法:
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串,返回值类型是一个字符串数组类型
举例:
public class RegexDemo2 {
public static void main(String[] args) {
//定义个字符串
String str1 = "aa,bb,cc" ;
//使用分割功能
String[] strArray1 = str1.split(",") ;
//遍历字符串数组
for(int x = 0 ; x < strArray1.length; x ++){
System.out.println(strArray1[x]);
}
System.out.println("------------------");
//字符串:
String str2 = "aa bb cc" ;
//使用切割功能:
String[] strArray2 = str2.split(" +") ;
for(int x = 0 ; x <strArray2.length ; x++){
System.out.println(strArray2[x]);
}
System.out.println("--------------------");
String str3 = "aa.bb.cc" ;
//分割功能
String[] strArray3 = str3.split("\\.") ;
for(int x =0 ; x<strArray3.length ; x ++){
System.out.println(strArray3[x]);
}
//硬盘上的路径表现形式:用两个反斜线代表一个反斜线
//E:\\JavaSE\\JavaCode\\day13
String str4 = "E:\\JavaSE\\JavaCode\\day13" ;
//使用分割功能
String[] strArray4 = str4.split("\\\\") ;
for(int x = 0 ; x <strArray4.length ; x ++){
System.out.println(strArray4[x]);
}
}
}
public String replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
举例:
public class RegexDemo3 {
public static void main(String[] args) {
//定义一个字符串:
String str = "helloword123JavaSE45678Javaweb" ;
//需求:让当前这个字符串中的数字不显示出来
//定义当前大串中数字定义正则规则
// String regex = "[0-9]+" ;
String regex = "\\d+" ;
String s = "*" ;
//public String replaceAll(String regex,String replacement)
String result = str.replaceAll(regex, s) ;
System.out.println("result:"+result);
}
}
模式与匹配器:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo4 {
public static void main(String[] args) {
//public static Pattern compile(String regex)将给定的正则表达式编译成一个模式对象
//1)获取模式对象(通过正则规则)
Pattern p = Pattern.compile("a*b") ;
//2)通过模式获取匹配器对象,(将一个字符串类型的数据)
Matcher m = p.matcher("aaaaaab") ;
//3)调用Match(匹配器类)中的:public boolean matches():判断当前用户录入的字符串是否和当前的正则规则匹配
boolean flag = m.matches() ;
System.out.println("flag:"+flag);
System.out.println("----------------------------");
//上述写法非常麻烦,要获取模式对象Pattern还要获取匹配器对象:Matcher,然后通过matches()方法返回一个结果
//以后可以使用下面这种格式
//定义一个正则规则
String regex = "a*b" ;
//指定某一个字符串
String str = "aaaaaaab" ;
//使用String类的功能
//使用当前给定的字符串调用public boolean matchers(String regex)
boolean flag2 = str.matches(regex) ;
System.out.println("flag2: "+flag2);
}
}