内容目录
正则表达式介绍
正则表达式重要类
通配符介绍
捕获组
实例
正则表达式介绍:
用于搜索或处理文本
正则表达式重要类:
正则表达式中设计两个中的类,分别是 Pattern和Matcher
Pattern是正则表达式的编译类,用于编译表达式;该类没有公共的构造方法,只能通过Pattern p = Pattern.compile(regex) 来获取
Matcher对象是增则表达式的匹配类,正则表达式编译好后用于匹配文本。
通配符介绍:
: 转义字符,可以匹配特殊符号或者元字符,"\"匹配"",“(”匹配“(”,“.”匹配"." 等
?:匹配子表达式零次或一次
*:匹配子表达式0次或多次
+:匹配子表达式1次或多次
{n}:n为非负整数,表达式匹配n次,比如:[A-Za-z0-9_]{10}匹配字符数字下划线3位,即可以匹配a2_、_2b,不能匹配超过3位的字符串
{n,}:n为非负整数,表达式匹配至少n次,如果是{0,}等同于*,如果是{1,}等同于+,如果是{0,1}等同于?
{n,m}:n,m均为非负整数,且n<=m
b:匹配一个边界,比如:catb可以匹配bbcat,但不能匹配bbcatb
B:匹配非边界字符,比如:catB可以匹配bbcatb,但不能匹配bbcat
d:匹配一个数字字符,等价于[0-9]
D:匹配一个非数字字符,等价于[^0-9]
s:匹配空白字符,比如空格,制表符等
S:匹配任何非空白
w:匹配字符数字下划线,等价于[A-Za-z0-9_]
W:匹配非字母数字下划线,等价于[^A-Za-z0-9_]
捕获组:
从表达式左侧开始,每遇到一个左括号“(” 记作一个分组,编号从1开始,编号为0时代表整个表达式
实例:
1.匹配用户名:
//匹配用户名
public voidregexUser() {
String regex= "^(\w){3,10}$";//相当于^[A-Za-z0-9_]{3,10}
String input = "aaaa_11235";boolean isMatch =Pattern.matches(regex, input);if(isMatch) {
System.out.println("MATCH SUCCESS");
}else{
System.out.println("MATCH FAILURE");
}
}
2.捕获组:public classGroupTest2 {
public static voidmain(String[] args) {
String regex= "^((\d{4})-(\d{2}))-(\d{2})$";
String input= "2019-01-02";
Pattern p= Pattern.compile(regex);//编译表达式
Matcher m = p.matcher(input); //匹配输入值
if (m.find()) {//是否匹配
int count = m.groupCount();//捕获组数量
for (int i = 0; i <= count; i++) {
System.out.println(m.group(i));
}
}
}
}
//输出值
2019-01-02
2019-01
2019
01
02
3.捕获组命名
//捕获组命名
public static voidgroupMM(){
String regex= "^(?(?\d{4})-(?\d{2}))-(?\d{2})$";
String input= "2019-01-02";
Pattern p= Pattern.compile(regex);//编译表达式
Matcher m = p.matcher(input); //匹配输入值
if (m.find()) {//是否匹配
System.out.println(m.group("ym"));
System.out.println(m.group("year"));
System.out.println(m.group("month"));
System.out.println(m.group("date"));
}
}
//输出值
2019-01
2019
01
02