正则表达式(上)

正则表达式

字符类

[abc] abc(简单类)

[^abc] 任何字符,除了 abc(否定)

[a-zA-Z] azAZ,两头的字母包括在内(范围)

[a-d[m-p]] admp[a-dm-p](并集)

[a-z&&[def]] def(交集)

[a-z&&[^bc]] az,除了 bc[ad-z](减去)

[a-z&&[^m-p]] az,而非 mp[a-lq-z](减去)

预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w

Greedy 数量词

X? X,一次或一次也没有

X* X,零次或多次 X+ X,一次或多次

X{n} X,恰好 n

X{n,} X,至少 n

X{n,m} X,至少 n 次,但是不超过 m

边界匹配器

^ 行的开头

$ 行的结尾

\b 单词边界

\B 非单词边界

\A 输入的开头

\G 上一个匹配的结尾

\Z 输入的结尾,仅用于最后的[结束符](如果有的话)

\z 输入的结尾

正则表达式作用:

  • 检验字符串是否满足规则
  • 在一段文本中查找满足要求的内容

小题一道

public static void main(String[] args) {
    /*需求:
请编写正则表达式验证用户输入的手机号码是否满足需求
请编写正则表达式验证用户输入的邮箱号码是否满足需求
请编写正则表达式验证用户输入的座机号码是否满足需求
*/
    //手机号码:15914493268  13535542117
    //邮箱号码:1355407724@qq.com    zhangsan@itcast.com   dlei0009@163.com   dlei0009@pci.com.cn
    //座机号码:020-2324242     02122442  027-42424   0712-3242434
    
    //书写细节:
    //拿着一个正确的数据,从左到右依次去写

    //手机号校验拆分成三部分
    //一部分:1开头
    //二部分:第二位3-9之间
    //三部分:[0-9]9位
    String regex1="1[3-9]\\d{9}";
    System.out.println("15914493268".matches(regex1));
    System.out.println("13535542117".matches(regex1));
    System.out.println("---------------------------------");
    //邮箱
    //一部分:@左边
    //二部分:@
    //三部分:@右边  又可分为.左边和.右边
    String regex2="\\w+@[\\w^_]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
    System.out.println("1355407724@qq.com".matches(regex2));
    System.out.println("zhangsan@itcast.com".matches(regex2));
    System.out.println("dlei0009@163.com".matches(regex2));
    System.out.println("dlei0009@pci.com.cn".matches(regex2));
    System.out.println("---------------------------------");
    //座机号:
    //一:区号
    //二:-
    //三:号码
    String regex3="0\\d{2,3}-?[1-9]\\d{4,9}";
    System.out.println("020-2324242".matches(regex3));
    System.out.println("02122442".matches(regex3));
    System.out.println("027-42424".matches(regex3));
    System.out.println("0712-3242434".matches(regex3));
}

拓展练习:

IDEA中有一个any-rule的插件可以用于直接生成正则表达式

//24小时的正则表达式
String regex4="(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
System.out.println("23:23:42".matches(regex4));

小结

正则表达式小结:(尽量混眼熟)

符号 含义 举例

[] 里面的内容出现一次 [0-9] [a-zA-Z]

() 分组 a(bc)+

^ 取反 [^abc]

&& 交集,不能写单个的& [a-z&&m-p]

| 写在方括号外面表示并集 [a-zA-Z0-9] x|X\

. 任意字符 \n回车符号不匹配

\ 转义字符 \\d

\\d 0-9 \\d+

\\D 非0-9 \\D+

\\s 空白字符 [\t\n\x0B\f\r]

\\S 非空白字符 [^\s]

\\w 单词字符 [a-zA-Z_0-9]

\\W 非单词字符 [^\w]

? 0次或1次 \\d?

* 0次或者多次 \\d* (abc)*

+ 一次或多次 \\d+

{} 具体次数 a{7}

(?i) 忽略后面字符的大小写 (?i)abc

a((?i)b)c 只忽略b的大小写 a((?i)b)c

posted @ 2022-11-09 14:37  喜欢七岁就很浪  阅读(18)  评论(0编辑  收藏  举报