Java正则表达式基本练习

Java正则表达式基本练习

在Java中,正则表达式(Regular Expression,简称regex或regexp)是一种强大的文本处理工具,它使用一种特定格式的字符串来描述、匹配和查找文本模式。正则表达式在Java中广泛应用于各种文本处理任务,如验证用户输入、搜索和替换文本中的特定模式等。

正则表达式的作用:

  1. 验证:用于验证用户输入是否符合特定格式,如电子邮件地址、电话号码等。
  2. 搜索:在文本中查找符合特定模式的字符串。
  3. 替换:将文本中符合特定模式的字符串替换为其他字符串。

如何使用正则表达式:

在Java中,java.util.regex 包提供了正则表达式的支持。主要的类有 PatternMatcher

  1. 创建Pattern对象:使用 Pattern.compile() 方法将正则表达式编译为 Pattern 对象。
Pattern pattern = Pattern.compile("\\d+"); // 匹配一个或多个数字
  1. 创建Matcher对象:使用 Pattern 对象的 matcher() 方法创建 Matcher 对象,用于在目标字符串上进行匹配操作。
Matcher matcher = pattern.matcher("abc123def456");
  1. 执行匹配操作:使用 Matcher 对象的各种方法执行匹配操作,如 find(), matches(), replaceAll(), replaceFirst() 等。
if (matcher.find()) {
    System.out.println("Found match: " + matcher.group());
}

注意事项:

  1. 转义字符:在正则表达式中,一些特殊字符(如 ., *, ?, +, ^, $, [, ], {, }, (, ), |, \)需要转义才能表示其字面意义。可以使用反斜杠 \ 进行转义。
  2. 性能问题:复杂的正则表达式可能导致性能问题,特别是在处理大量文本时。尽量保持正则表达式的简洁和高效。
  3. 可读性:复杂的正则表达式可能难以理解和维护。为了提高可读性,可以使用命名捕获组、注释等特性。

常用和对打竞赛有帮助的方法:

  1. 匹配方法
  • matches():整个区域与模式匹配。
  • find():查找下一个匹配项。
  • lookingAt():从输入序列的起始位置开始尝试匹配模式。
  1. 替换方法
  • replaceAll():替换所有匹配项。
  • replaceFirst():替换第一个匹配项。
  1. 分组与捕获:使用括号 () 创建捕获组,可以通过 Matchergroup() 方法获取捕获的内容。

  2. 边界匹配

  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • \b:匹配一个单词边界。
  1. 预定义字符类
  • .:匹配任何单个字符(除了换行符)。
  • \d:匹配一个数字字符。
  • \D:匹配一个非数字字符。
  • \s:匹配任何空白字符。
  • \S:匹配任何非空白字符。
  • \w:匹配任何单词字符(等价于 [a-zA-Z_0-9])。
  • \W:匹配任何非单词字符。

在编程竞赛中,正则表达式常用于文本解析、模式识别等任务。熟练掌握正则表达式的基本语法和常用方法,能够帮助你快速解决相关问题。

练习一:

  • 细节:拿着正确的数据,从左往右依次去写
package com.mohuanan.zhengze;

public class Demo01 {
    public static void main(String[] args) {
        //正则表达式1
        String regex1 = "[1][3-9]\\d{9}";
        String str = "17363305031";
        boolean matches1 = "13447944571".matches(regex1);
        System.out.println(matches1);

        //正则表达式2
        System.out.println("------------");
        String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
        boolean matches2 = "020-0324242".matches(regex2);
        System.out.println(matches2);
        System.out.println("-----------");
        //正则表达式3
        //注意点 使用. 需要\\(两个\\表示一个\),然后再加一个. 因为.也是转义字符
        //()表示分组 ([a-zA-Z]{2,3}){1,2}:表示有1个或者2个组;(a-z-A-Z有两个或者3个)
        String regex3 = "\\w+@[\\w&&[^_]]{2,6}\\.([a-zA-Z]{2,3}){1,2}";
        String str3 = "2736674847@qq.com";
        boolean matches3 = str3.matches(regex3);
        System.out.println(matches3);

        String regex4 = "[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]";
        boolean mathes4 = "452402555508120617".matches(regex4);
        System.out.println(mathes4);
    }
}

练习二:

  • 细节:拿着正确的数据,从左往右依次去写
package com.mohuanan.zhengze;

public class Demo03 {
    public static void main(String[] args) {
        //要求一:18位 前面17位任意数字(但是第一个数字不能是0) 最后一个数字或者x,X
        //String regex1 = "[1-9]\\d{16}[\\dxX]";
        //或者
        String regex1 = "[1-9]\\d{16}(\\d|(?i)x)";
        String str1 = "45240220050945054X";
        boolean matches1 = str1.matches(regex1);
        System.out.println(matches1);
        //(?i)abc: 表示忽略abc的大小写
        //a(?i)ab: 表示忽略bc的大小写
        //a((?i)b)c: 表示只忽略b的大小写
        System.out.println("-------------");

        //身份证号码的严格校验
        String idRegex = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}[\\dxX]";
        String str2 = "452402200512345678";
        boolean matches2 = str2.matches(idRegex);
        System.out.println(matches2);
    }
}
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值