2022-08-12 第二小组 张明旭 Java学习记录

发布于:2023-01-20 ⋅ 阅读:(330) ⋅ 点赞:(0)

目录

重点归纳

知识点

正则表达式

元字符

重复限定符

分组

转义

条件

区间

反义

常见的正则表达式

配合正则表达式使用的三个类


重点归纳

正则表达式

知识点

正则表达式

又称规则表达式(Regular Expression Regex),核心功能为处理文本

用途:利用一个固定形式的表达式去对应字符串(文本),判断字符串(文本)是否符合表达式从而获取信息
例:从一个文章中找到所有的邮箱
   查看输入的手机号是否合法
   查看身份证号是否合法

通用性质:不局限于某一种语言,各个语言之间的正则表达式相差无几

元字符

.    :(是一个点,别看不清)匹配除了换行符之外的任意字符
\w:匹配字或数字或下划线或汉字
\s:空格
\d:匹配数字
\b:匹配单词的开始或结束
^:匹配字符串的开始
$:匹配字符串的结束

例如:匹配8位数字的QQ号:^\d\d\d\d\d\d\d\d$
    匹配1开头11位数:^1\d\d\d\d\d\d\d\d\d\d$
(在代码中有转义字符)

重复限定符

*:重复零次或更多次
+:重复一次或更多次
?:重复零次或一次
{n}:重复n次
{n,}:重复n次或更多次
{n,m}:重复n到m次

例如:匹配8位数字的QQ号:^\d{10}$
银行卡号14~18位:^\d{14,18}$
匹配以a开头,0个或多个b结尾的字符串:^ab*$

分组

限定符的作用于与它相邻的最左边的一个字符起作用
如果想要将多个字符同时被限定,可以用分组()。

正则表达式中可以用()来分组,()里的内容会作为一个整体

转义

例:
匹配字符串中包含0到多个(ab)开头:
^((\ab\))*
匹配的是ab

条件

例:联通手机号开头有:130、131、132、134、155、156、185、186,现要匹配联通的号码
用单或“|”,正则中没有双或
^(130|131|132|134|155|156|185|186)\d{8}$

区间

正则表达式提供了[]表示区间
0-9:[0-9]
限定某些数字:[130]
例:^((13[0-2])|(15[5-6]|186[5-6]))\d{8}$

反义

格式:\+大写
例如:
\s:空格
\S:不是空格
\W:不是字母、数字、下划线、中文
[^x]:匹配除了x以外的任意字符
[^aeiou]:匹配除了aeiou以外的任意字符

常见的正则表达式

匹配中文的字符:[],匹配的是ASCII码


邮箱:1234567894@qq.com
     asdcvs-xxcx@163.com
[]里为可能出现的东西挨着写:
^[a-zA-z0-9_-]+@[a-zA-z0-9_-]+(\.[a-zA-z0-9_-]+)$


国内的座机电话号码:0431-12345678/010-12345678
^\d{3,4}-\d{8}$


QQ号
^[1-9][0-9]{4,11}$


身份证号(220122199009091234)
^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$

配合正则表达式使用的三个类

  1. Pattern类
  2. Matcher类
  3. PatternSyntaxException类
public class Ch02 {
    @Test
    public void test01(){
        String str = "hello,i am from jilin changchun!";
        // 必须包含jilin
        String pattern = ".*jilina.*";
        boolean b = Pattern.matches(pattern,str);
        System.out.println("字符串中是否包含了jilin:" + b);
    }

    @Test
    public void test02() {
        //写出QQ邮箱表达式
        String regex = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
        String email = "175367745@qq.";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(email);
        System.out.println(matcher.matches());
    }

    @Test
    public void test03() {
        String regex = "a";
        String str = "cat cat dog dog cat";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);

        // 统计cat在字符串中出现的次数
        int count = 0;
        System.out.println(matcher.find(str.length() - 1));
        while(matcher.find()){
            count++;
        }
        System.out.println("出现了" + count + "次");
    }

    @Test
    public void test04() {
        //判断email格式是否合法
        String regex = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
        String email = "175367745@qq.com";
        System.out.println(email.matches(regex));
    }

    @Test
    public void test05(){
        //   \d为数字形式
        String regex = "\\d";
        String str = "1111c2222d456456456f465gh987897";
        //将str中regex形式的字符串全部改成“@”
        String s = str.replaceAll(regex, "@");
        System.out.println(s);
    }

    @Test
    public void test06() {
        String regex = "[-_]";
        String str = "123-4756_qweqwe-7987_465";
        //将str以regex中字符分割
        String[] split = str.split(regex);
        System.out.println(Arrays.toString(split));
    }
}
本文含有隐藏内容,请 开通VIP 后查看