随笔 - 54,  文章 - 2,  评论 - 8,  阅读 - 1584

###学习心得###

正则表达式不局限于某一种语言,有元字符,还有重复限定符,能转义,还有反义的,也有区间

###心情###🤣🤣🤣

今天的正则表达式还算好理解,就是记住就行,和以前学的东西有相似之处

    掌握情况:还行,今天复习时间较长

 

正则表达式

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

又叫做规则表达式,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{8}$
匹配1开头的11位手机号: ^\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|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码

例如邮箱123456789rbxp@qq.com

邮箱:^[a-z A-Z 0-9 _ -] + @ [ a-z A-Z 0-9 _ - ]+( \.[a-z A-Z 0-9 _ -]+)+$


 

国内的电话号码:0431-81234567 010-81234567 021-81234567

^\d { 3,4 } - \d { 8 } $


 

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

 

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);
    }
}
复制代码

----------------------------------------------------------

----------------------------------------------------------

posted on   骐琳  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
你点我就回上面去了ヾ(≧O≦)〃嗷~
点击右上角即可分享
微信分享提示