1 概述
正则表达式用于匹配规定格式的字符串。
除了上面的以外,还有一个符号就是括号,括号括起来的表示一个捕获组,一个捕获组可以作为一个重复单位来处理。
2 使用
2.1 判断是否匹配
String自带了一个可以使用正则表达式判断字符串是否满足某一规则的matches方法。
public class RegexDemo02 {
public static void main(String[] args) {
//public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true
// 只能是 a b c
System.out.println("a".matches("[abc]")); // true
System.out.println("z".matches("[abc]")); // false
// 不能出现a b c
System.out.println("a".matches("[^abc]")); // false
System.out.println("z".matches("[^abc]")); // true
System.out.println("a".matches("\\d")); // false
System.out.println("3".matches("\\d")); // true
System.out.println("333".matches("\\d")); // false
System.out.println("z".matches("\\w")); // true
System.out.println("2".matches("\\w")); // true
System.out.println("21".matches("\\w")); // false
System.out.println("你".matches("\\w")); //false
System.out.println("你".matches("\\W")); // true
System.out.println("---------------------------------");
// 以上正则匹配只能校验单个字符。
// 校验密码
// 必须是数字 字母 下划线 至少 6位
System.out.println("2442fsfsf".matches("\\w{6,}")); //true
System.out.println("244f".matches("\\w{6,}")); //false
// 验证码 必须是数字和字符 必须是4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}")); //true
System.out.println("23_F".matches("[a-zA-Z0-9]{4}")); //false
System.out.println("23dF".matches("[\\w&&[^_]]{4}")); //true
System.out.println("23_F".matches("[\\w&&[^_]]{4}")); //false
}
}
2.2 正则分割替换
public class RegexDemo04 {
public static void main(String[] args) {
String names = "小路dhdfhdf342蓉儿43fdffdfbjdfaf小何";
String[] arrs = names.split("\\w+");
for (int i = 0; i < arrs.length; i++) {
System.out.println(arrs[i]);
}
String names2 = names.replaceAll("\\w+", " ");
System.out.println(names2);
}
}
输出
小路
蓉儿
小何
小路 蓉儿 小何
split根据正则表达式来分割字符串,replaceAll根据正则表达式来替换字符串
2.3 正则表达式相关类
可以使用Pattern和Matcher类来操作正则表达式相关
public class RegexDemo05 {
public static void main(String[] args) {
String rs = "来学习Java,电话020-43422424,或者联系邮箱" +
"4324@163.com,电话18762832633,0203232323" +
"邮箱432432@163.com,400-100-3233 ,4001003232";
// 需求:从上面的内容中爬取出 电话号码和邮箱。
// 1、定义爬取规则,字符串形式
String regex = "(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})|(1[3-9]\\d{9})" +
"|(0\\d{2,6}-?\\d{5,20})|(400-?\\d{3,9}-?\\d{3,9})";
// 2、把这个爬取规则编译成匹配对象。
Pattern pattern = Pattern.compile(regex);
// 3、得到一个内容匹配器对象
Matcher matcher = pattern.matcher(rs);
// 4、开始找了
while (matcher.find()) {
String rs1 = matcher.group();
System.out.println(rs1);
}
}
}
输出
020-43422424
4324@163.com
18762832633
0203232323
432432@163.com
400-100-3233
4001003232
把正则表达式编译成Pattern对象,然后调用matcher方法返回一个Matcher对象,调用find方法来遍历匹配的字符串。