JavaRegexImprove练习(1) (2024.7.22)

        ImproveExercise1

package RegexImprove20240722;
import java.util.Scanner;
public class ImproveExercise {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.nextLine();
        //  需求:需要把类似:我要学学编编编编程程程程程程替换为我要学编程
        // (.)是一个捕获组,可以匹配所有字符
        // \\1表示匹配前面的捕获组一次或多次 \\1是对第一个捕获组的引用
        // "(.)\\1+":整体意思是匹配任何连续重复的字符
        // 当成功匹配到所有的连续重复的字符之后,会用$1在正则表达式之外引用第一组
        String result = str.replaceAll("(.)\\1+", "$1");
        System.out.println(result);
    }
}

        RegexImprove1

package RegexImprove20240722;
import java.util.Scanner;
public class RegexImprove1 {
    public static void main(String[] args) {
        // 捕获分组()
        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入一个字符串");
//        String str = sc.nextLine();
//        // 分组括号,()相当于一组,以左括号为分组的顺序,\1相当于把第一组的数据用来再匹配一次
//        if (str.matches("(.).+\\1")) {
//            System.out.println("合法字符串");
//        } else {
//            System.out.println("非法字符串");
//        }

        // 需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符
//        System.out.println("请输入一个字符串");
//        String str = sc.nextLine();
//        if (str.matches("(.+).+\\1")) {
//            System.out.println("合法字符串");
//        } else {
//            System.out.println("非法字符串");
//        }

        // 需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致
        System.out.println("请输入一个字符串");
        String str = sc.nextLine();
        // 分组括号分组规则是看左括号,而不是一个完整的括号,看且仅看左括号
        // 所以说可以用(.)来代表第一个数据\\2其实是(.)而不是((.)\2*),((.)\2*)是\\1,相当于第一部分
        if (str.matches("((.)\\2*).+\\1")) {
            System.out.println("合法字符串");
        } else {
            System.out.println("非法字符串");
        }

    }
}

        RegexImprove2

package RegexImprove20240722;
import java.util.Scanner;
public class RegexImprove2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String str = sc.nextLine();
        // 正则表达式可以用(?i)来忽略大小写,(?i)表示忽略后面的大小写
        if (str.matches("(?i)[a-z]+")) {
            System.out.println("合法字符串");
        } else {
            System.out.println("非法字符串");
        }
    }
}

        RegexImprove3

package RegexImprove20240722;
import java.util.Scanner;
public class RegexImprove3 {
    public static void main(String[] args) {
        // 非捕获分组
        Scanner sc = new Scanner(System.in);
//        String regex = "[1-9]\\d{16}(?:\\d|x|x)\\1";
//        System.out.println("请输入身份证号");
//        String id = sc.nextLine();
//        System.out.println(id.matches(regex)); // regex中\\1报错了,因为(?:)不是捕获分组,所以说不存在第一组
        String rightRegex = "[1-9]\\d{16}[\\dxX]";
        System.out.println("请输入身份证号");
        String id = sc.nextLine();
        System.out.println(id.matches(rightRegex));

    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值