加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式:java中String对正则表达式的支持

发布时间:2020-12-14 01:27:39 所属栏目:百科 来源:网络整理
导读:声明:以下纯属个人见解和总结,可能存在理解错误的地方,如有发现敬请指出,不胜感激。 概念:以一个特殊的字符串来描述一个格式,让程序按照这个格式去验证字符串,那么用于描述格式的这个字符串就是正则表达式。 正则表达是只规定格式,不规定内容。 验证

声明:以下纯属个人见解和总结,可能存在理解错误的地方,如有发现敬请指出,不胜感激。

概念:以一个特殊的字符串来描述一个格式,让程序按照这个格式去验证字符串,那么用于描述格式的这个字符串就是正则表达式。正则表达是只规定格式,不规定内容。

验证一个字符串是否满足一个正则表达式的方法:boolean str.matches(String regex);

正则表达式常用语法

1、" () "和" [] "的使用

        // "()"表示把括号中的内容看作整体匹配
        String regex1 = "(ABC)";

        System.out.println("A".matches(regex1));// false
        System.out.println("ABC".matches(regex1));// true
        System.out.println("ABCDEFG".matches(regex1));// false
        System.out.println("ABCABC".matches(regex1));// false
        
        // "[]"表示匹配括号中的字符任选其一
        String regex2 = "[ABC]";
        
        System.out.println("A".matches(regex2));// true
        System.out.println("B".matches(regex2));// true
        System.out.println("C".matches(regex2));// true
        System.out.println("AB".matches(regex2));// false
        System.out.println("ABC".matches(regex2));//false
        System.out.println("ABCDEFG".matches(regex2));// false
        System.out.println("ABCABC".matches(regex2));// false

2、" ^ "的使用

在一些资料中," ^ "被介绍成"匹配输入字符串的开始位置"。

但是我在java代码中的使用过程和测试中发现:如果" ^ "不是出现在" [] " 中,没有实际的意义,当出现在" [] "中是表示"非"的意思。

        String regex1 = "ABC";

        System.out.println("A".matches(regex1));// false
        System.out.println("BC".matches(regex1));// false
        System.out.println("ABC".matches(regex1));// true
        System.out.println("ABCABC".matches(regex1));// false
        System.out.println("ABCDEFG".matches(regex1));// false
        System.out.println("DDD ABC".matches(regex1));// false
        
        // "^"在这里没有实际的意义,结果与上面相同
        String regex2 = "^ABC";

        System.out.println("A".matches(regex2));// false
        System.out.println("BC".matches(regex2));// false
        System.out.println("ABC".matches(regex2));// true
        System.out.println("ABCABC".matches(regex2));// false
        System.out.println("ABCDEFG".matches(regex2));// false
        System.out.println("DDD EFG".matches(regex2));// false
        
        // "^"在这里没有意义
        String regex3 = "(^ABC)";
        
        System.out.println("A".matches(regex3));// false
        System.out.println("BC".matches(regex3));// false
        System.out.println("ABC".matches(regex3));// true
        System.out.println("DBC".matches(regex3));// false
        System.out.println("EFG".matches(regex3));// false
        System.out.println("ABCDEFG".matches(regex3));// false
        
        // "^"在这里表示"非"的意思,表示除A,B,C意外的任意一个字符
        String regex4 = "[^ABC]";
        
        System.out.println("A".matches(regex4));// false
        System.out.println("B".matches(regex4));// false
        System.out.println("C".matches(regex4));// false
        System.out.println("BC".matches(regex4));// false
        System.out.println("ABC".matches(regex4));// false
        System.out.println("D".matches(regex4));// true
        System.out.println("E".matches(regex4));// true
        System.out.println("n".matches(regex4));// true

3、" | "的使用

在上面的介绍中,我们知道" ^ "可以表示"非",同样我们还可以在正则表达式中使用" | "(或)。

" | "或使用示例:

        String regex1 = "A|B|C";
        
        System.out.println("".matches(regex1));// false
        System.out.println("A".matches(regex1));// true
        System.out.println("B".matches(regex1));// true
        System.out.println("C".matches(regex1));// true
        System.out.println("D".matches(regex1));// false
        System.out.println("AB".matches(regex1));// false
        
        String regex2 = "[ABC]|(DEF)";
        
        System.out.println("".matches(regex2));// false
        System.out.println("A".matches(regex2));// true
        System.out.println("B".matches(regex2));// true
        System.out.println("C".matches(regex2));// true
        System.out.println("AB".matches(regex2));// false
        System.out.println("ABC".matches(regex2));// false
        System.out.println("D".matches(regex2));// false
        System.out.println("DEF".matches(regex2));// true
        System.out.println("ABCDEF".matches(regex2));// false

这时候有人可能会问" || "这个或行不行,在正则表达式中" || "可以使用,但是会被当作两个" | "使用,而且中间是一个长度为0的字符串。

        String regex3 = "A||B||C";
        
        // 注意,这时的"".matches(regex3)结果为true,而上面的例子中结果为false
        System.out.println("".matches(regex3));// true
        System.out.println("A".matches(regex3));// true
        System.out.println("B".matches(regex3));// true
        System.out.println("C".matches(regex3));// true
        System.out.println("D".matches(regex3));// false
        System.out.println("AB".matches(regex3));// false

4、正则表达式的区间表示

通过使用" [] "可以表示区间、范围,或者可以说是一个简写,具体通过如下的实例进行理解。

[a-z]:只能出现一个小写英文字母,a-z表示一项,只不过是一个范围。

[0-9]:只能出现一个数字。

[a-zA-Z0-9]:描述一个字符,可以是任意数字或字母。

[^0-9]:只能出现一个非数字的字符。

5、" && "的使用

在上面的内容中介绍了"或"和"非"的使用,有人会问,正则表达式中是否可以使用"与"。

答案是肯定的,但是"与"的使用比"或"和"非"比较难于理解,最简单的方法就是将" && "理解成为交集。

" && "使用示例:

        // 任意一个小写字母的集合 与 任意一个非b、c字符的集合 的交集
        // 即得到集合{a,d,e,f,g,h,i,j,kl,m,n,o,p,q,r,s,t,u,v,w,x,y,z}
        String regex1 = "[a-z&&[^bc]]";

        System.out.println("----------" + regex1 + "----------");
        System.out.println("a".matches(regex1));// true
        System.out.println("b".matches(regex1));// false
        System.out.println("d".matches(regex1));// true
        System.out.println("n".matches(regex1));// false

        // 任意一个小写字母的集合 与 集合{d,A,B,C}的交集
        // 即得到集合{d,f}
        String regex2 = "[a-z&&[defABC]]";

        System.out.println("----------" + regex2 + "----------");
        System.out.println("a".matches(regex2));// false
        System.out.println("d".matches(regex2));// true
        System.out.println("e".matches(regex2));// true
        System.out.println("f".matches(regex2));// true
        System.out.println("g".matches(regex2));// false
        System.out.println("A".matches(regex2));// false

        // 任意一个小写字母 与 任意一个数字 的交集
        // 得到一个空集,所以任何字符串进行校验都是返回false
        String regex3 = "[a-z&&0-9]";
        
        System.out.println("----------" + regex3 + "----------");
        System.out.println("".matches(regex3));// false
        System.out.println("a".matches(regex3));// false
        System.out.println("0".matches(regex3));// false
        System.out.println("a&&0".matches(regex3));// false
        System.out.println("a-z&&0-9".matches(regex3));// false
        System.out.println("[a-z&&0-9]".matches(regex3));// false

" && "必须出现在" [] "中才有意义,否则就是普通的字符串"&&"。

        // 这里"&&"并不是"与"的意思,而是表示字符&&
        String regex4 = "A&&B";

        System.out.println("A&&B".matches(regex4));// true

        String regex5 = "(ABC)&&(DEF)";

        System.out.println("ABC&&DEF".matches(regex5));// true

        String regex6 = "[ABC]&&[DEF]";

        System.out.println("A&&D".matches(regex6));// true
        System.out.println("B&&D".matches(regex6));// true

6、正则表达式中的量词

在正则表达式中常用的量词有如下几个:

?:表示前面的内容出现0-1次

*:表示前面的内容出现0-任意次

+:表示前面的内容出现1-任意次

{n}:表示前面的内容出现n次

{n,m}:表示出现最少n次,最多m次

{n,}:表示出现n次以上

使用示例:

        // "?"表示前面的内容出现0-1次
        String regex1 = "A?";

        System.out.println("".matches(regex1));// true
        System.out.println("A".matches(regex1));// true
        System.out.println("AA".matches(regex1));// false
        System.out.println("AB".matches(regex1));// false
        System.out.println("B".matches(regex1));// false
        
        // "*"表示前面的内容出现0-任意次
        String regex2 = "A*";

        System.out.println("".matches(regex2));// true
        System.out.println("A".matches(regex2));// true
        System.out.println("AA".matches(regex2));// true
        System.out.println("AB".matches(regex2));// false
        System.out.println("B".matches(regex2));// false
        
        // "+"表示前面的内容出现1-任意次
        String regex3 = "A+";

        System.out.println("".matches(regex3));// false
        System.out.println("A".matches(regex3));// true
        System.out.println("AA".matches(regex3));// true
        System.out.println("AB".matches(regex3));// false
        System.out.println("B".matches(regex3));// false
        
        // "{n}"表示前面的内容出现n次
        String regex4 = "A{2}";

        System.out.println("".matches(regex4));// false
        System.out.println("A".matches(regex4));// false
        System.out.println("AA".matches(regex4));// true
        System.out.println("AAA".matches(regex4));// false
        System.out.println("BAA".matches(regex4));// false
        
        // "{n,m}"表示出现最少n次,最多m次
        String regex5 = "A{2,4}";

        System.out.println("A".matches(regex5));// false
        System.out.println("AA".matches(regex5));// true
        System.out.println("AAA".matches(regex5));// true
        System.out.println("AAAA".matches(regex5));// true
        System.out.println("AAAAA".matches(regex5));// false
        System.out.println("AAB".matches(regex5));// false
        
        // "{n,}"表示出现n次以上
        String regex6 = "A{2,}";

        System.out.println("A".matches(regex6));// false
        System.out.println("AA".matches(regex6));// true
        System.out.println("AAA".matches(regex6));// true
        System.out.println("AAAA".matches(regex6));// true
        System.out.println("AAAAA".matches(regex6));// true
        System.out.println("BAA".matches(regex6));// false

7、正则表达式中常用的元字符

其实在上面介绍的" ^ "," | "," () "," [] "," ? "," * "," + "," {} "都是正则表达式中的元字符。这里再介绍一些常用的元字符。

.:用来描述除了"n"之外的任意一个字符

d:描述任意一个数字,等同于[0-9]

D:描述任意一个非数字字符,等同[^0-9],[^d]

s:任意一个空白字符,例如空格,t,n等

S:描述任意一个非空白字符

w:任意一个单词字符,等同[a-zA-Z_0-9]

W:任意一个非单词字符,等同[^w]

注意:由于元字符在正则表达式中有特殊的含义,java编译器在编译是会将第一个""作为转义字符,所以我们在使用带有""的元字符时,需要使用""。

使用示例:

        String regex1 = ".";
        
        System.out.println("A".matches(regex1));// true
        System.out.println("t".matches(regex1));// true
        System.out.println("b".matches(regex1));// true
        System.out.println("n".matches(regex1));// false
        System.out.println("a".matches(regex1));// true
        System.out.println(".".matches(regex1));// true
        
        String regex2 = "d";
        
        System.out.println("A".matches(regex2));// false
        System.out.println("0".matches(regex2));// true
        
        String regex3 = "D";
        
        System.out.println("A".matches(regex3));// true
        System.out.println("0".matches(regex3));// false
        System.out.println("n".matches(regex3));// true
        
        String regex4 = "s";
        
        // 这是一个空格
        System.out.println(" ".matches(regex4));// true
        System.out.println("t".matches(regex4));// true
        System.out.println("n".matches(regex4));// true
        System.out.println("A".matches(regex4));// false
        
        String regex5 = "S";
        
        System.out.println(" ".matches(regex5));// false
        System.out.println("t".matches(regex5));// false
        System.out.println("A".matches(regex5));// true
        System.out.println(".".matches(regex5));// true
        
        String regex6 = "w";
        
        System.out.println("A".matches(regex6));// true
        System.out.println("a".matches(regex6));// true
        System.out.println("0".matches(regex6));// true
        System.out.println("_".matches(regex6));// true
        System.out.println(".".matches(regex6));// false
        
        String regex7 = "W";

        System.out.println("A".matches(regex7));// false
        System.out.println("a".matches(regex7));// false
        System.out.println("0".matches(regex7));// false
        System.out.println("_".matches(regex7));// false
        System.out.println(".".matches(regex7));// true
        System.out.println("n".matches(regex7));// true

如果在正则表达式中需要匹配" ^ "," ? "," * "," + "," () "," [] "," . "等元字符,我们需要使用""进行转义。

由于java编译器在编译时会将第一个""作为转义字符转义,所以我们需要使用""。

        // String regex1 = "^";// 编译错误
        String regex1 = "^";
        System.out.println("^".matches(regex1));// true
        
        String regex2 = "()";
        System.out.println("()".matches(regex2));// true
        
        String regex3 = ".";
        System.out.println(".".matches(regex3));// true
        
        String regex4 = "{}";
        System.out.println("{}".matches(regex4));// true

8、在正则表达式中可以使用Unicode字符

例如:

        // 判断一个字符串是否全是中文
        String regex = "[u4e00-u9fa5]*";

        System.out.println("ABC".matches(regex));// false
        System.out.println("ABC中文".matches(regex));// false
        System.out.println("中文ABC".matches(regex));// false
        System.out.println("ABC中文DEF".matches(regex));// false
        System.out.println("中文".matches(regex));// true

9、正则表达式中还可以使用ASCII编码

        // 十六进制表示法,必须为确定的两个数字长
        String regex1 = "x41";
        System.out.println("A".matches(regex1));// true
        
        // 八进制表示法
        String regex2 = "101";
        System.out.println("A".matches(regex2));// true
        
        String regex3 = "x61";
        System.out.println("a".matches(regex3));// true
        
        String regex4 = "141";
        System.out.println("a".matches(regex4));// true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读