引语:正则表达式多用于项目的账号密码验证,其作用可以极大降低代码量
1.正则表达式初体验 |
2.正则表达式使用方法(推荐API文档查阅不需背) |
3.正则表达式一些案例 |
4.正则表达式在一些方法中的应用 |
5.正则表达式爬取信息(拓展,有点类似python爬虫) |
1.正则表达式初体验
//案例:登录码判断是否符合规范
//如判断6到20位只包含数字的判断方法
//方法1:普通方法
public static void main(String[] args) {
System.out.println(regex("31425423535"));//true
}
public static boolean regex(String qq){
if(qq==null ||qq.length()<6||qq.length()>20) return false;
for (int i = 0; i < qq.length(); i++) {
char ch=qq.charAt(i);
if (ch<'0'||ch>'9') return false;
}
return true;
}
//方法2:正则表达式
public static void main(String[] args) {
System.out.println(NewRegex("3213123"));
}
public static boolean NewRegex(String qq){
return qq!=null&&qq.matches("\\d{6,20}");
}
以上案例可以看出正则表达式可以大幅度简化代码量
2.正则表达式使用方法(推荐API查阅不用都背)
1.在javaAPI中搜索pattern则返回正则表达式各种使用方法(我使用的是jdk16和jdk17版本都是可以正常使用的)
2.以下是根据API写的一些内容,可以看懂API然后调用即可
public static void main(String[] args) { /*[abc] a, b, 或c(简单类) [^abc] a除, b, 或c(否定)以外的任何字符 [a-zA-Z] a通过z 或A通过Z,包括(范围) [a-d[m-p]] a通过d,或m通过p:([a-dm-p]联合) [a-z&&[def]] d, e, or f(intersection) [a-z&&[^bc]] a通过z,除了b和c:([ad-z]减法) [a-z&&[^m-p]] a通过z,而不是m通过p:([a-lq-z]减法) 预定义的字符类*/ System.out.println("a".matches("[abc]")); System.out.println("z".matches("[^abc]")); System.out.println("E".matches("[a-zA-Z]")); System.out.println("e".matches("[a-zA-Z]")); System.out.println("c".matches("[a-d[o-z]]")); System.out.println("f".matches("[a-d[o-z]]")); System.out.println("d".matches("[a-z&&[def]]")); System.out.println("a".matches("a-z&&[def]")); System.out.println("----------------------------"); /* \d 一个数字:[0-9] \D 非数字:[^0-9] \h 水平空白字符: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000] \H 非水平空白字符:[^\h] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \v 垂直空白字符:[\n\x0B\f\r\x85\u2028\u2029] \V 非垂直空白字符:[^\v] \w 一个字字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] \w 一个字字符:[a-zA-Z_0-9]*/ //API中的\前需要再添加\,是由于java对\的敏感所以需要进行转义, //以上规则为小写为大写的反向表达 System.out.println("1".matches("\\d")); System.out.println("d".matches("\\D")); System.out.println("f".matches("\\w")); System.out.println("@".matches("\\W")); }
3.利用正则表达式判断电话号码和邮箱号码是否正确
(小技巧:idea上ctrl+alt+t可以为选中内容进行死循环或者异常处理)
public static void main(String[] args) {
checkPhone();//电话号码判断
}
public static void checkPhone(){
Scanner sc=new Scanner(System.in);
System.out.println("输入手机号");
while (true) {
if (sc.next()!=null&&sc.next().matches("\\d{11}")){
System.out.println("存在");//代表存在手机号
break;
}else {
System.out.println("不存在");//代表不存在手机号
}
}
}
public static void main(String[] args) {
checkEmail();//电子邮箱判断
}
ublic static void checkEmail(){
//1090762149@qq.com
Scanner sc=new Scanner(System.in);
while (true) {
System.out.println("请输入电子邮箱号");
//1090762149@qq.com
String email=sc.next();
if(email!=null&&email.matches("\\w{5,15}@\\w{2}\\.\\w{3}")){/*由于每个人邮箱号不一样在此理解语法,不同情况再看API处理*/
System.out.println("存在");
break;
}else {
System.out.println("不存在");
}
}
}
4.正则表达式在方法中的应用
方法名 | 说明 |
public String relpaceAll(String s1,String s2) | 按照正则表达式匹配内容进行替换 |
public String[] split(String regex) | 按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组 |
public static void main(String[] args) {
//利用split进行乱数据分割;
String str="黑Animal啊tiger呀Dog";
String[]arr=str.split("\\w+");//分割单词结果出汉字
String[]arrs=str.split("\\W+");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
for (int i = 0; i < arrs.length; i++) {
System.out.println(arrs[i]);
}
}
public static void main(String[] args) {
//利用replaceAll进行替换的方法
String str="黑Animal啊tiger呀Dog";
String newstr=str.replaceAll("\\w+"," ");//将括号左边的内容替换为括号右边内容
System.out.println(newstr);
}
5.正则表达式爬取网站字符串内容格式模板,直接套用,然后regex内容替换成自己需要的正则表达式内容即可
public static void main(String[] args) {
//需求:从网上的内容中爬取自己所需要的内容
String result="X";//X:X代表从互联网上爬取的一堆需要和不需要内容的随机混杂
String regex="(a)|(b)|(c)|.....";//定义爬取规则和字符串形式
//a,b,c代表填入需要内容的正则表达式,括号则是进行分组
Pattern pattern=Pattern.compile(regex);//将爬取规则编译成字符串对象
Matcher matcher=pattern.matcher(result);//得到一个内容匹配对象
//开始寻找
while (matcher.find()){
String results=matcher.group();
System.out.println(results);
}
}