【Java正则表达式】理解和开发中常用

正则表达式定义了字符串的模式。可以用来搜索、编辑或处理文本。并不仅限于某一种语言,但是在每种语言中有细微的差别。

正则表达式java.util.regex 包主要包括以下三个类:

  • Pattern 类:

    pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

  • Matcher 类:

    Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

  • PatternSyntaxException:

    PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

捕获组

捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。

例如,正则表达式 (dog) 创建了单一分组,组里包含"d","o",和"g"。

捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。

还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。

实例:

public class RegexMatches {
    public static void main( String args[] ){

        // 按指定模式在字符串查找
        String line = "This order was placed for QT3000! OK?";
        String pattern = "(\\D*)(\\d+)(.*)";

        // 创建 Pattern 对象
        Pattern r = Pattern.compile(pattern);

        // 现在创建 matcher 对象
        Matcher m = r.matcher(line);
        if (m.find( )) {
            System.out.println("Found value: " + m.group(0) );
            System.out.println("Found value: " + m.group(1) );
            System.out.println("Found value: " + m.group(2) );
            System.out.println("Found value: " + m.group(3) );
        } else {
            System.out.println("NO MATCH");
        }
    }
}
结果:
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000
Found value: ! OK?

public static void main(String[] args) {
    String pattern = "^\\/user\\/[a-zA-Z0-9]+\\/self_password$";
    Pattern p = Pattern.compile(pattern);
    System.out.print(p.matcher("/user/iiii44/self_password").matches());
}


正则表达式语法:





常用正则表达式:

验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0) ^\d+$
验证非正整数(负整数 + 0) ^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由 26个英文字母组成的字符串:^[ a-za-z]+$
验证由26个大写英文字母组成的字符串:^[ a-z]+$
验证由26个小写英文字母组成的字符串:^[ a-z]+$
验证由数字和 26个英文字母组成的字符串:^[ a-za-z0-9]+$
验证由数字和 26个英文字母9位组成的字符串:^[0-9a-zA-Z]{9}$
验证由数字、 26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[ a-za-z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[ a-za-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^( \d3,4 \d3,4|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证 身份证号(15位或18位数字):^\d{15}|\d{18}$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数 : ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0): ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数: ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数: ^(-?\d+)(\.\d+)?
匹配所有键盘上可见的非字母和数字的符号:((?=[\ x21 -\x7e]+)[^A-Za-z0-9])
匹配所有键盘上所有可见的非字母和数字的符号:((?=[\x21-\x7e]+)[^A-Za-z0-9])/g
匹配包括换行符在内的任意字符: ([\s\S]*) 同时,也可以用 “([\d\D]*)”、“([\w\W]*)” 来表示;([\s\S]*?) 加上问号 表示最短匹配
匹配长度为1-20的任意字符:
public class RegexDemo {
    public static void main(String[] args) {
        String pattern = "([\\s\\S]){1,20}";
        Pattern p = Pattern.compile(pattern);
        System.out.print(p.matcher("12345678908-哈哈rrrurr!").matches());
    }
}

正则表达式枚举出 数字 0 1 : String str = "^(0|1)$";

密码校验可参考:https://www.cnblogs.com/cexm/p/7737538.html

Matcher 类的方法

索引方法提供了有用的索引值,精确表明输入字符串中在哪能找到匹配:


研究方法用来检查输入字符串并返回一个布尔值,表示是否找到该模式:


替换方法是替换输入字符串里文本的方法:


PatternSyntaxException 类的方法

PatternSyntaxException 是一个非强制异常类,它指示一个正则表达式模式中的语法错误。

PatternSyntaxException 类提供了下面的方法来帮助我们查看发生了什么错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式经典实例第2版是一本关于正则表达式的经典参考书籍。它包含了丰富的实例和示例,帮助读者深入理解和应用正则表达式正则表达式是一种用于匹配和操作文本的强大工具,广泛应用于程序开发、文本处理和数据分析等领域。 这本书的第2版进一步完善了第1版的内容,包括新增了一些实用的正则表达式的应用场景和技巧。它从基础内容入手,介绍了正则表达式的语法和常用的元字符,然后逐步深入讲解了正则表达式的高级应用,如贪婪与贪婪匹配、分组与引用、零宽断言等。 书的实例丰富多样,涵盖了各种常见的文本处理需求,如匹配日期、验证邮箱、提取URL等。每个实例都有详细的说明和步骤,读者可以按照书上的示例进行实践,加深对正则表达式理解和掌握。 这本书还特别关注了几种流行的编程语言和工具对正则表达式的支持和应用,如JavaScript、Java、Python和Perl等。对于不同的语言,书提供了相应的实例和代码,帮助读者在实际项目灵活运用正则表达式。 总之,正则表达式经典实例第2版是一本经典的正则表达式参考书籍,它详细介绍了正则表达式的语法和应用,提供了丰富的实例和示例,并涵盖了多种编程语言和工具的应用。通过学习这本书,读者可以掌握正则表达式的基本原理,提升文本处理和数据分析的技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值