其他分享
首页 > 其他分享> > 2022-08-12 第八组 卢睿 学习心得

2022-08-12 第八组 卢睿 学习心得

作者:互联网

正则表达式

今日重点

  1. 正则表达式
  2. 元字符
  3. 重复限定符
  4. 分组
  5. 转义
  6. 常见的正则表达式

前言

从一个文章中找到所有的邮箱
看看输入的手机号是否合法
身份证号

又叫做规则表达式,Regular Expression Regex
判断字符串,核心功能处理文本

正则表达式不局限于某一种语言。

Hello World

元字符

.:匹配除了换行符之外的任意字符
\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{8}$
匹配1开头11位数手机号:^1\d{10}$

银行卡号14~18位:^\d{14,18}$

匹配以a开头,0个或多个b结尾的字符串^ab*$

分组

限定符的作用与它相邻的最左边的一个字符起作用,那么问题来了,
如果我想要ab同时被限定怎么办?
正则表达式中可以用小括号来分组,括号内的内容会作为一个整体。
^(ab)*$

转义

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

条件

手机号:
联通:130 131 132 134 155 156 185 186
匹配一个联通的手机号。或
| 单或
联通手机号:^(130|131|132|134|155|156|185|186)\d{8}$

区间:

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

反义:

\W:不是字母、数字,下划线、中文
\S:不是空格
\D:不是数字
\B:不是单词开头或结束
[^x]:除了x以外的任意字符
[^aeiou]:匹配除了aeiou的任意字符

常见的正则表达式:

匹配中文的字符:[],匹配的时ASCII码
175367745@qq.com
abcdfeg-xxx@163.com.cn
邮箱:^ [a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
国内的电话号码: 0431-81234567 010-81234567 021-12345678
^\d{3,4}-\d{8}$
QQ号: ^ [1-9][0-9]{4,11}$

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

public class Ch01 {

    public static void main(String[] args) {
//        String reg = "^\\d{8}";
//        System.out.println((int)'吉');
        System.out.println("\\");
        System.out.println("\\\\");
    }
}
import org.junit.Test;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 * Pattern类
 * Matcher类
 * PatternSyntaxException类
 */
public class Ch02 {

    @Test
    public void test06() {
        String regex = "[-_]";
        String str = "123-4756_qweqwe-7987_465";
        String[] split = str.split(regex);
        System.out.println(Arrays.toString(split));
    }

    @Test
    public void test05(){
        String regex = "\\d";
        String str = "1111c2222d456456456f465gh987897";

        String s = str.replaceAll(regex, "@");
        System.out.println(s);
    }

    @Test
    public void test04() {
        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 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 test02() {
        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 test01() {
        String str = "hello,i am from jilin changchun!";
        // 必须包含jilin
        String pattern = ".*jilina.*";
        boolean b = Pattern.matches(pattern,str);
        System.out.println("字符串中是否包含了jilin:" + b);
    }
}

标签:regex,12,匹配,String,08,System,2022,println,out
来源: https://www.cnblogs.com/lurui711/p/16583481.html