String对正则表达式的支持
- 什么是正则表达式?
不是java的,是独立的体系,有自己的语法,java支持正则表达式
用正则表达式来描述一种格式
一些特殊的字符表示一些特定的语义
要求:
能看懂简单的正则表达式
会写一些简单的正则表达式
职责范围:只能判断格式,不关注有效性
[] 一个字符
[a,b,c] a,b,c中的任意一个
[^abc] 除a,b,c以外的任意一个
[a-z] a-z中的任意一个
[a-zA-Z0-9] 所有字母和数字中的一个
[a-z&&[^be]] 在a-z中除了b和e以外的一个
. 任意一个字符
\d 任意一个数字
\w 任意一个单词字符[a-zA-Z0-9]
\s 空白字符
\D 非数字
\W 非单词字符
\S 非空白字符
x? 表示0个或者1个x
x+ 表示1个或者1个以上x
x* 表示任意个x
x{n} 表示有n个x
x{n,m} 表示有n-m个x
x{n,} 表示至少有n个x,没有上限
x{0,m} 表示有0至m个x
() 表示分组,可以将一系列正则表达式看做一个整体,分组时可以使用"|"表示或关系
边界匹配:
^ 代表字符串开始
$ 代表字符串结束
案例一:
public static void main(String[] args){
//需要被屏蔽的敏感词汇
String regex = "fuck";
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的评论");
String con = sc.next();
//替换某些字符 replace()
con = con.replace(regex,"****");
System.out.println(con);
key.close();
}
案例二:
public static void mian(String[] args){
//需要屏蔽的敏感词
String regex = "fuck|tmd|cnm";
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的评论:");
String con = sc.next();
con = con,replaceAll(regex,"****");
System.out.println(con);
key.close()
}
案例三:
正则表达式用法:
一般用^开始,$表示结束
[1234]表示匹配1-4的数字
{3,16}表示3-16个内容
[^123]表示123以外的数字
public static void mian(String[] args){
Scanner sc = new Scanner(System.in);
System.out.pritln("请输入内容: ");
String con = sc.nextLine();
//*: 匹配0到多个
//+: 匹配1到多个
//?: 0或1
// String regex = "^[0-9]*$"
// String regex = "^\\d$"
//匹配指定个数
//"^[0-9]{8}$": 表示匹配8个数字
//"^[0-9]{8,12}"表示匹配8-12个数字
//匹配6-20位的密码,密码包含大小写字符,数字,下划线
// []--->|
// String regex = "^[a-zA-Z-9]{6,20}$"
//
//[^123]:匹配123以外的字符
// String regex = "^[^123]{3,6}$"
//
// +86 15071411484
// 0086 15071411484
//+86/0086:0次1次,用?
//空格:\s
//数字:\d
//表示11位:{11}
//():小括号表示分组 //
String regex = "^(\\+86|0086)?\\s\\d{3}$";
//[]表示里面其中的一个
String regex = "^[\\+86|0086]?\\s\\d{3}$";
if(con.matches(regex)) {
System.out.println("输入合理");
}else {
System.out.println("输入错误,回家吧");
}
}
具体应用:
public class RegexDemo01{
//输入字符str
String str = sc.next();
//标准字符串格式,在[0-9]之间的一个
String regex1 = "^[0-9]+$";//输入 2|5|9, 结果合理
//等价于String regex1 = "^\\d$";
//+:匹配前面的子表达式一次或多次
String regex2 = "[0-9]+";//输入 5|123,结果合理
//匹配指定个数
String regex3 = "^[0-9]{7}$";//表示匹配7个数字
String regex4 = "^[0-9]{7,}$";//表示匹配至少7个数字
String regex5 = "^[0-9]{7,9}$";//表示匹配7到9个数字
//匹配6-20位的密码,密码可以包含大小写的字符a-z,0-9 _
String regex6 = "^[a-zA-Z0-9_]{6,20}$";
//选除去0-9之外的字符
String regex7 = "^[^0-9]$";
//手机号 +86 15837499657 0086 15837499657
//+86 0086:0次或者1次 ?
//{}:表示位数 ():表示分组
String regex8 = "^(\\+86\\s|0086\\s)?\\d{11}$"
//匹配输入的字符是否符合标准字符
if(str.matches(regex1)){
System.out.println("输入合理");
}else{
System.out.println("输入不合理");
}
if(str.matches(regex2)){
System.out.println("输入合理");
}else{
System.out.println("输入不合理");
}
}
}