正则表达式
- 由一些特定字符组成,代表的是一个规则
- 作用一:校验数据格式是否合法
- 作用二:在一段文本中查找满足要求的内容
String提供了一个匹配正则表达式的方法
public boolean matches(String regex(正则表达式)) 判断字符串是否匹配正则表达式,匹配返回true,否则false
正则表达式的书写规则:
案例1
需求:检验用户输入的电话、邮箱、时间是否合法
代码:
import java.util.Scanner;public class CheckPhoneEmailTime {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (true) {System.out.print("请输入你要校验的手机号码or邮箱or时间(输入0退出):");String str = sc.nextLine();if(str.equals("0")) break;if(str.matches("(1[3-9]\\d{9})|" + //手机号码"0\\d{2,3}-?[1-9]\\d{6,7}|" + //座机号码"\\w{2,}@\\w{2,20}\\.\\w{2,10}|" + //邮箱号码"([0-1]\\d)|(2[0-4])((:)|(-)|(\\.))[0-5]\\d((:)|(-)|(\\.))[0-5]\\d")) //时间格式System.out.println("格式正确");elseSystem.out.println("格式错误");}}
}
运行结果:
案例2
import java.util.Arrays;public class Regex_test {public static void main(String[] args) {// public String replaceAll(String regex , String newStr); 按照正则表达式匹配的内容进行替换//1.请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴 中间的非中文字符替换成"-"String s1 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";System.out.println(s1.replaceAll("\\w+", "-")); //+表示一或多//2.请把我我我喜欢编编编编编编编编编编编编程程程! 替换成我喜欢编程!
// (.) 匹配任意字符, ()表示一组
// \\1 为这个组声明一个组号:1 标记它
// {2,} 表示这个字至少出现俩次
// $1取出标记的那个组的内容String s2 = "我我我喜欢编编编编编编编编编编编编程程程!";System.out.println(s2.replaceAll("(.)\\1{2,}", "$1"));//public string[]split(string regex):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。//3.请把 古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴 中的人名获取出来。String s3 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";System.out.println(Arrays.toString(s3.split("\\w+")));}
}
运行结果: