Java重温学习笔记,正则式

一、java中正则表达式常用的语法

字符的取值范围
1.[abc] : 表示可能是a,可能是b,也可能是c。
2.[^abc]: 表示不是a,b,c中的任意一个
3.[a-zA-Z]: 表示是英文字母
4.[0-9]:表示是数字

简洁的字符表示
.:匹配任意的字符
\d:表示数字
\D:表示非数字
\s:表示由空字符组成,[ \t\n\r\x\f]
\S:表示由非空字符组成,[^\s]
\w:表示字母、数字、下划线,[a-zA-Z0-9_]
\W:表示不是由字母、数字、下划线组成

数量表达式
1.?: 表示出现0次或1次
2.+: 表示出现1次或多次
3.*: 表示出现0次、1次或多次
4.{n}:表示出现n次
5.{n,m}:表示出现n~m次
6.{n,}:表示出现n次或n次以上

逻辑表达式
1.XY: 表示X后面跟着Y,这里X和Y分别是正则表达式的一部分
2.X|Y:表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f
3.(X):子表达式,将X看做是一个整体

二、几个简单的正则式示范

1. 表达式t.o 可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等。
2. 表达式:t[abcd]n 只可以匹配:tan,tbn,tcn,tdn。不可以匹配:thn,tabn,tn等。
3. 表达式:t(a|b|c|dd)n 只可以匹配:tan,tbn,tcn,tddn。不可以匹配taan,tn,tabcn等。
4. 表达式:[0—9]{3}\—[0-9]{2}\—[0-9]{3} 的匹配格式为:999—99—999
5. 常用正则表达式
规则 正则表达式语法  
一个或多个汉字 ^[\u0391-\uFFE5]+$ 
邮政编码 ^[1-9]\d{5}$
QQ号码 ^[1-9]\d{4,10}$ 
邮箱 ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$
用户名(字母开头 + 数字/字母/下划线) ^[A-Za-z][A-Za-z1-9_-]+$
手机号码 ^1[3|4|5|8][0-9]\d{8}$ 
URL ^((http|https)://)?([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ 
18位身份证号 ^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X|x)?$

三、由String类已经实现的几个常用方法

import java.util.Scanner;

public class MyDemo {
    public static void main(String[] args){
        // 1. 判断功能
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入手机号码:");
        String s1 = sc.nextLine();

        String regex1 = "1[38]\\d{9}";    // 规则:13或18打头,后面再接9位数字
        boolean flag = s1.matches(regex1); 
        System.out.println("手机号正确?" + flag);
        
        // 2. 分割功能
        String age = "18-24"; 
        String regex2 = "-";
        String[] strArr = age.split(regex2); // 分割成字符串数组
        
        // 取得想要的值
        int startAge = Integer.parseInt(strArr[0]);
        int endAge = Integer.parseInt(strArr[1]);
        
        // 3. 替换功能        
        String s3 = "this is my test 1984 hahaha";
        String regex3 = "\\d";
        String temp = "_";
        String result = s3.replaceAll(regex3, temp);
        System.out.println(result);
    }
}

四、利用Pattern/Matcher处理的示范

import java.util.regex.*;

public class MyDemo {
    public static void main(String[] args) {
        // 1. 检查邮箱格式是否正确
        String str = "somebody@mysite.net";
        String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";

        Pattern pattern = Pattern.compile(regEx);
        // Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(str);
        boolean result = matcher.matches(); 
        System.out.println(result);
            
        // 2. 从字符串中提取出所有数字,并打印起始与结束位置
        str = "我的QQ是:56789 我的电话是:12345 我的邮箱是:test9876@163.com";
        regEx = "\\d+";
        
        pattern = Pattern.compile(regEx);
        matcher = pattern.matcher(str);
        while(matcher.find()) {
           System.out.println(matcher.group());
           System.out.print("start:" + matcher.start()); 
           System.out.println(" end:" + matcher.end()); 
        }
        
        // 3. 利用String类的方法,将上述字符串拆分(去除所有数字)
        String[] myStrArray = str.split(regEx);
        for (String s: myStrArray) {
            System.out.println(s);
        }
    }
}
输出如下:
%JAVA_HOME%\bin\java "MyDemo" ...
true
56789
start:6 end:11
12345
start:18 end:23
9876
start:34 end:38
163
start:39 end:42
我的QQ是:
我的电话是:
我的邮箱是:test
@
.com
本文参考:
https://www.cnblogs.com/xhj123/p/6032683.html
https://blog.csdn.net/weixin_43860260/article/details/91417485
https://www.cnblogs.com/xyou/p/7427779.html
https://www.cnblogs.com/lzq198754/p/5780340.html
posted @ 2021-06-19 11:01  那些年的事儿  阅读(150)  评论(0编辑  收藏  举报