正则表达式以及案例

语法规则

元字符-匹配规则

规则:.
含义:句号匹配任意单个字符除了换行符

规则:x
含义:代表的是字符 x
例如:匹配规则为 "a",那么需要匹配的字符串内容就是 ”a”

[]表示可能出现的数据类型 范围用- ,也可以枚举

规则:[abc]
含义:代表的是字符 a、b 或 c 匹配括号内任意字符
例如:匹配规则为"[abc]",那么需要匹配的内容就是字符 a,或者字符 b,或字符 c 的一个

规则:[^abc]
含义:代表的是除了 a、b 或 c 以外的任何字符
例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符 a,或者不是字符 b,或不是字符
c 的任意一个字符

\转义符

规则:\\
含义:代表的是斜线字符'\'
例如:匹配规则为"\\" ,那么需要匹配的字符串内容就是 ”\”

system.out.println(str.matches("\\\\")) 正则中\\对应字符串一个\

规则:[a-zA-Z]
含义:代表的是 a 到 z 或 A 到 Z,两头的字母包括在内
例如:匹配规则为"[a-zA-Z]",那么需要匹配的是一个大写或者小写字母

规则:[0-9]
含义:代表的是 0 到 9 数字,两头的数字包括在内
例如:匹配规则为"[0-9]",那么需要匹配的是一个数字

规则:[a-zA-Z_0-9]
含义:代表的字母或者数字或者下划线(即单词字符)
例如:匹配规则为" [a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下滑线

规则:\\d
含义:相当于[0-9]。代表的是 0 到 9 数字,0 和 9 包括在内。
例如:匹配规则为"\\d ",那么需要匹配的是一个数字

规则:\\w
含义:相当于[a-zA-Z_0-9]。代表的字母或者数字或者下划线
例如:匹配规则为"\\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线

边界匹配器:^
含义:代表以某些内容开头

边界匹配器:$
含义:代表以某些内容结尾

边界匹配器:\b
含义:代表的是单词边界。
注意:不能单独使用,几乎不使用
例如:匹配规则为"\b[abc]\b",那么代表的是字母 a 或 b 或 c 的左右两边需要的是非单词字符


元字符-重复次数

规则:*
含义:匹配前面的子表达式零次或多次。
例如:zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}

规则:?
含义:匹配前面的子表达式零次或一次。
例如:"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。

规则:{n,m}
含义:匹配前面的子表达式n到m次。
例如:{}表示重复前一个表达式的次数

​ {n}表示重复n次

​ {n,m}表示重复n-m次

​ {n,} 至少匹配n次

小练习demo

1、vin 车架号

/**
 * 1.数字加大写字母,长度17位;
 * 2.字母不会出现O、Q、I三个字母
 * 3.第9位只能是【0-9】的数字和字母X;
 * 4.第13-17位只能是数字;
 */
public class zz {
    public static void main(String[] args) {
        String hex = "L6T76F2Z4MF048035";
        String regex = "^[A-HJ-NPR-Z\\d]{8}[X\\d][A-HJ-NPR-Z\\d]{3}\\d{5}$";
        System.out.println(hex.matches(regex));
    }
}

### 2、验证是否为有效数字
/**
 * 验证是否为有效数字
 * 规则分析:
 * 1.可能出现 + - 符号,也可能不出现  => [+-]?
 * 2.如果是一位数 0-9 都可以,如果是多位数字 首位不能是 0 => (\d|([1-9]\d+))
 * 3.如果是小数的话,那么后面必须有小数点和数字 => (\.\d+)?
 */
public class zz {
    public static void main(String[] args) {
        String hex = "+23";
        String regex = "^[+-]?(\\d|([1-9]\\d+))(\\.\\d+)?$";
        System.out.println(hex.matches(regex));
    }
}

3、验证密码

/**
 * 验证密码
 * 1.组成的元素例如有数字、字母、下划线
 * 2.长度 6- 16 位
 */
public class zz {
    public static void main(String[] args) {
        String hex = "Lysicy";
        String regex = "^\\w{6,16}$";
        System.out.println(hex.matches(regex));
    }
}

### 4、验证真实姓名
/**
 * 验证真实姓名
 * 1.汉字 /^[\u4E00-\u9FA5]$/
 * 2.名字长度例如 2-10
 * 3.可能有译名 .汉字
 */
public class zz {
    public static void main(String[] args) {
        String hex = "饿的一笔想吃肯德基";
        String regex = "^[\\u4E00-\\u9FA5]{2,10}(\\.[\\u4E00-\\u9FA5]{2,10})?$";
        System.out.println(hex.matches(regex));
    }
}

5、验证邮箱

/**
 * 验证邮箱
 * 规则分析:
 * 1、开头是数字字母下划线(1到多位)
 *    还可以是 -数字字母下划线 或者 .数字字母下划线,整体零到多次
 *    => 邮箱的名字由“数字、字母、下划线、-,.”几部分组成 ,但是-/. 不能连续出现也不能作为开始
 *    => \w+((-\w+)|(\.\w+))*
 *
 * 2、@ 后面紧跟着:数字、字母 (1-多位) => @[A-Za-z0-9]+
 * 3、对@ 后面名字的补充
 *    多域名 .com.cn
 *    企业邮箱  => xxx@ xxx.com
 */
public class zz {
    public static void main(String[] args) {
        String hex = "12345667@qq.com";
        String regex = "^\\w+((-\\w+)|(\\.\\w+))*@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
        System.out.println(hex.matches(regex));
    }
}

### 6、身份证号码
/**
 * 身份证号码
 * 1.一共是18位
 * 2.最后以为可能是X
 */
public class zz {
    public static void main(String[] args) {
        String hex = "33028219990908919X";
        String regex = "^\\d{17}(\\d|X)$";
        System.out.println(hex.matches(regex));
    }
}

7、验证iccid

/**
 * ICCID:Integrate circuit card identity 集成电路卡识别码即SIM卡卡号,相当于手机号码的身份证。
 * ICCID为IC卡的识别号码,共有20位字符组成,
 * 其编码格式为:XXXXXX 0MFSS YYGXX XXXX。分别介绍如下:
 * 前六位运营商代码:中国移动的为:898600;898602;898604;898607
 * ,中国联通的为:898601、898606、898609,中国电信898603、898611。
 */
public class zz {
    public static void main(String[] args) {
        String hex = "8986000MFSSYYG334445";
        String regex = "^(898600|898602|898604|898607|898601|898606|898609|898603|898611)0MFSSYYG[A-Z0-9]{6}$";
        System.out.println(hex.matches(regex));
    }
}

匹配的常用方法

/**
 * 查找以222结尾的数据
 */
public class zz {
    public static void main(String[] args) {
        String pattern = "222$";
        String str = "1133fe1222";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(str);
        //全字符匹配
        System.out.println(m.matches());
        //字符串是否满足表达式,1次即可
        System.out.println(m.find());
        //返回匹配表达式的第一个字符下标,从0开始
        System.out.println(m.start());
        //返回匹配表达式的最后一个下标
        System.out.println(m.end());
    }
}
posted @ 2022-05-25 20:26  纵情95  阅读(265)  评论(0编辑  收藏  举报