栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Pattern的多种匹配模式 -- 《JAVA编程思想》42

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pattern的多种匹配模式 -- 《JAVA编程思想》42

Pattern.complie(String regex) 方法可用来生成 Matcher 类,但它还有个重载的 Pattern.complie(String regex,int flag)方法可以用来指定各种匹配模式。

今天就和大家一起来学习 Pattern 类的几种不同匹配模式:

  1. Pattern.CANON_EQ

此模式下进行匹配会考虑字符的等价性,例如:正则表达式 u003f 会匹配字符 ?, 因为 ?的 unicode 编码就是 u003f。

        Pattern p = Pattern.compile("\u003f",Pattern.CANON_EQ);
        System.out.println(p.matcher("?").matches());
true

2.Pattern.CASE_INSENSITIVE(?i)

此模式下进行匹配会忽略 US-ASCII字符集中的大小写敏感,若需要忽略 Unicode 中的大小写敏感,需要结合 Pattern.UNICODE_CASE 使用。

若需要同时开启 Pattern 的多种匹配模式,可以通过 ( | ) 组合多个标记。

        Pattern p = Pattern.compile("[A-Z]+", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
        System.out.println(p.matcher("abc").matches());
true

可在正则表达式开头定义 (?i) 开启此模式。

        Pattern p = Pattern.compile("(?i)|(?u)[A-Z]+");
        System.out.println(p.matcher("abc").matches());
true

3.Pattern.CASE_INSENSITIVE (?u)

此模式下进行匹配会忽略 Unicode 字符集中的大小写敏感。

可在正则表达式开头定义 (?u) 开启此模式。

4.Pattern.COMMENTS(?x)

此模式下进行匹配会忽略正则表达式中的空格及#开始后面的部分。

可在正则表达式开头定义 (?x) 开启此模式。

        Pattern p1 = Pattern.compile("#[A-Z]+");
        System.out.println(p1.matcher("#ABC").matches());
        Pattern p2 = Pattern.compile("#[A-Z]+", Pattern.COMMENTS);
        System.out.println(p2.matcher("#ABC").matches());
        Pattern p3 = Pattern.compile("[0-9]+#[A-Z]+", Pattern.COMMENTS);
        System.out.println(p3.matcher("123").matches());
        Pattern p4 = Pattern.compile("[A-Z]+ [0-9]+");
        System.out.println(p4.matcher("ABC123").matches());
        Pattern p5 = Pattern.compile("[A-Z]+ [0-9]+",Pattern.COMMENTS);
        System.out.println(p5.matcher("ABC123").matches());
true
false
true
false
true

5.Pattern.DOTALL(?s)

此模式下 "."会匹配换行符,默认匹配模式下 “.” 不会匹配换行符。

可在正则表达式开头定义 (?s) 开启此模式。

        Pattern p = Pattern.compile("[A-Z].*");
        System.out.println(p.matcher("ABCnDEF").matches());
        Pattern p2 = Pattern.compile("[A-Z].*",Pattern.DOTALL);
        System.out.println(p2.matcher("ABCnDEF").matches());
false
true

6.Pattern.MULTILINE(?m)

在此模式会开启多行匹配,默认模式下只会匹配字符串的第一行,多行模式会根据 ^ 和 $ 分别匹配每一行的开始和结束。

可在正则表达式开头定义 (?m) 开启此模式。

        Pattern p = Pattern.compile("^.*BC$");
        Matcher m = p.matcher("ABnBC");
        System.out.println(m.find());
        Pattern p2 = Pattern.compile("^.*BC$", Pattern.MULTILINE);
        Matcher m2 = p2.matcher("ABnBC");
        if (m2.find()) {
            System.out.println("m2 group:" + m2.group());
        }
false
m2 group:BC

7.Pattern.UNIX_LINES(?d)

在此模式下进行匹配,在 . 、^ 、$ 三种行为中,只会将 n 认作换行符,默认模式下会将 r 也认作换行符。

可在正则表达式开头定义 (?d) 开启此模式。

开启 Pattern.UNIX_LINES 模式后,总共匹配了三次字符,分别是(Ar)、(BrC)、(D),在 IDEA 控制台中看不到 r 的打印效果,可以通过断点进行调试查看或者通过 CMD 运行程序。

        String data = "ArnBrCnD";
        System.out.println(data);
        Matcher m = Pattern.compile(".+").matcher(data);
        while (m.find()) {
            System.out.println("["+m.group()+"]");
        }
        m = Pattern.compile(".+",Pattern.UNIX_LINES).matcher(data);
        while (m.find()) {
            System.out.println("["+m.group()+"]");
        }
A
B
C
D
[A]
[B]
[C]
[D]
[A
]
[B
C]
[D]

  1. Pattern.LITERAL

此模式下所有的转移字符或元字符都将表示字面含义,不代表任何特殊意义

        Pattern p = Pattern.compile("\s");
        System.out.println(p.matcher("\s").matches());
        Pattern p2 = Pattern.compile("\s", Pattern.LITERAL);
        System.out.println(p2.matcher("\s").matches());
false
true

9.Pattern.UNICODE_CHARACTER_CLASS

此匹配模式下会启用Unicode版本的预定义字符类和POSIX字符类。

查找多方资料暂时发现一种用法:

w 默认只匹配[a-zA-Z0-9] 开启此模式后,w 可以匹配任何语言的任何字符。

可在正则表达式开头定义 (?U) 开启此模式。

        Pattern p1 = Pattern.compile("\w+");
        System.out.println(p1.matcher("中国").matches());
        Pattern p2 = Pattern.compile("\w+", Pattern.UNICODE_CHARACTER_CLASS);
        System.out.println(p2.matcher("中国").matches());
false
true

本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。

若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985235.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号