正则表达式基础内容

正则表达式

基本概念

其本质就是一个“规则字符串”,可以用于对字符串数据的格式进行验证,以及匹配、查找、替换等操作

该字符串通常使用==^运算符作为开头标志,使用$==运算符作为结尾标志,当然也可以省略

正则表达式规则

正则表达式说明
[abc]可以出现a、b、c中任意一个字符
[^abc]可以出现任何字符,除了a、b、c的任意字符
[a-z]可以出现a、b、c、……、z中的任意一个字符
[a-zA-Z0-9]可以出现a-z、A-Z、0-9中任意一个字符
正则表达式说明
.任意一个字符(通常不包含换行符)
\d任意一个数字字符,相当于[0-9]
\D任意一个非数字字符
\s空白字符,相当于[\t\n\x0B\f\r]
\S非空白字符
\w任意一个单词字符,相当于[a-zA-Z_0-9]
\W任意一个非单词字
正则表达式说明
^X表示必须以X开头
X$表示必须以X结尾
X?表示X可以出现一次或一次也没有,也就是0 ~ 1次
X*表示X可以出现零次或多次,也就是0 ~ n次
X+表示X可以出现一次或多次,也就是1 ~ n次
X{n}表示X可以出现恰好 n 次
X{n,}表示X可以出现至少 n 次,也就是>=n次
X{n,m}表示X可以出现至少 n 次,但是不超过 m 次,也就是>=n并且<=m

正则表达式相关的方法

正则表达式说明
boolean matches(String regex)判断当前正在调用的字符串是否匹配参数指定的正则表达式规则

案例题目一

  • 使用正则表达式描述一下银行卡密码的规则:要求是由6位数字组成。
  • 正则表达式描述一下QQ号码的规则:要求是由非0开头的5~15位数组成。
  • 正则表达式描述一下手机号码的规则:要求是由1开头,第二位数是3、4、5、7、8中的一位,总共11位
  • 身份证号码的规则:总共18位,6位数字代表地区,4位数字代表年,2位数字代表月,2位数字代表日期, 3位数字代表个人,最后一位可能数字也可能是X。
public class StringRegTest {

    public static void main(String[] args) {

        // 1.定义描述规则的正则表达式字符串并使用变量记录
        // 正则表达式只能对数据格式进行验证,无法对数据内容的正确性进行检查,
        // 内容的正确性检查需要后台查询数据库
        // 描述银行卡密码的规则:由6位数字组成
        //String reg = "^[0-9]{6}$";
        //String reg = "[0-9]{6}"; // ^ 和 $ 可以省略
        //String reg = "\\d{6}"; // 前面一个斜杠\是用于转义
        // 使用正则表达式描述一下QQ号码的规则:要求是由非0开头的5~15位数字组成。
        //String reg = "[1-9]\\d{4,14}";
        // 使用正则表达式描述一下手机号码的规则:
        //   要求是由1开头,第二位数是3、4、5、7、8中的一位,总共11位
        //String reg = "1[34578]\\d{9}";
        // 描述身份证号码的规则:总共18位,6位数字代表地区,4位数字代表年,
        // 2位数字代表月,2位数字代表日期, 3位数字代表个人,最后一位可能数字也可能是X。
        // 小括号里面为一个整体,([0-9|X])中的|表示或的意思
        String reg = "(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9|X])"; 
		// 上面的身份证号输入格式:46000319891230465X
	
        // 2.提示用户从键盘输入指定的内容并使用变量记录
        Scanner sc = new Scanner(System.in);
        while(true) {
            //System.out.println("请输入您的银行卡密码:");
            //System.out.println("请输入您的QQ号码:");
            //System.out.println("请输入您的手机号码:");
            System.out.println("请输入您的身份证号码:");
            String str = sc.next();

            // 3.判断用户输入的字符串内容是否满足指定的规则并打印
            if (str.matches(reg)) {
                //System.out.println("银行卡密码的格式正确!");
                System.out.println("输入字符串的格式正确!");
                break;
            } else {
                //System.out.println("银行卡密码的格式错误!");
                System.out.println("输入字符串的格式错误!");
            }
        }
    }
}
正则表达式说明
String[] split(String regex)参数regex为正则表达式,以regex所表示的字符串为分隔 符,将字符串拆分成字符串数组
String replace(char oldChar, char newChar)使用参数newChar替换此字符串中出现的所有参数 oldChar
String replaceFirst(String regex, String replacement)替换此字符串匹配给定的正则表达式的第一个子字符串
String replaceAll(String regex, String replacement)将字符串中匹配正则表达式regex的字符串替换成 replacement

案例题目二

public class StringRegMethodTest {

    public static void main(String[] args) {

        // 1.准备一个字符串对象并打印
        String str1 = "1001,zhangfei,30";
        System.out.println("str1 = " + str1); // 1001,zhangfei,30
        
        // 2.按照逗号对字符串内容进行切割
        String[] sArr = str1.split(",");
        for (int i = 0; i < sArr.length; i++) {
            System.out.println("下标为"+i+ "的字符串是:" + sArr[i]); //1001 zhangfei 30
        }

        System.out.println("----------------------------------------------------");
        // 3.准备一个字符串内容并进行替换
        String str2 = "我的小名叫大帅哥";
        // 将字符串中所有的字符'我'替换为'你'
        String str3 = str2.replace('我', '你');
        System.out.println("str2 = " + str2); // 我的小名叫大帅哥
        System.out.println("str3 = " + str3); // 你的小名叫大帅哥
        // 将字符串中所有的字符'大'替换为'小'
        String str4 = str3.replace('大', '小');
        System.out.println("str4 = " + str4); // 你的小名叫小帅哥
        // 将字符串中所有的字符'小'替换为'大'
        String str5 = str4.replace('小', '大');
        System.out.println("str5 = " + str5); // 你的大名叫大帅哥

        System.out.println("----------------------------------------------------");
        // 4.准备一个字符串进行字符串内容的替换
        String str6 = "123abc456def789ghi";
        // 将第一个数字字符串替换为"#"
        String str7 = str6.replaceFirst("\\d+", "#");
        System.out.println("替换第一个字符串后的结果是:" + str7); // #abc456def789ghi
        // 将所有字母字符串替换为"A"
        String str8 = str7.replaceAll("[a-z]+", "A");
        System.out.println("str8 = " + str8); // #A456A789A

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值