正则表达式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 字符类(只匹配单个字符)
    字符类(只匹配单个字符)
  • 预定义字符(只匹配单个字符)
    在这里插入图片描述
  • 数量词
    在这里插入图片描述

小结

  • 正则表达式的书写规则
符号 含义 举例
? 0次或1次 \\d?
* 0次或多次 \\d* ---------- (abc)*
+ 1次或多次 \\d+ --------- (abc)+
{} 具体次数 a{7} --------- \\d{7, 19}
(?i) 忽略后面字符的大小写 (?i)abc
a((?i)b)c 只忽略b的大小写 a((?i)b)c
[] 里面的内容出现1次 [abc]
^ 取反 [^abc]
&& 交集,不能写单个的& [a-z&&m-p]
. 任意字符 \n回车符号不匹配
\ 转义字符 \\d
\\d 0-9 \\d+
\\D 非0-9 \\D+
\\s 空白字符 \\D+
\\S 非空白字符 [^\s]
\w 单词字符 [a-zA-Z_0-9]
\\W 非单词字符 [^\w]
() 分组 并集 a(bc)+
写在方括号外面表示

# 正则表达式爬取信息

// 需求1:从以下内容中爬取出手机、邮箱、座机电话等信息
    private static void method1() {
        String data = "一起学Java,\n" +
                "电话:13511296261,15265432051,\n" +
                "或者联系邮箱:bonus@163.com,\n" +
                "座机电话:010123456789,010-123564812,\n" +
                "邮箱:13194641245@qq.com,\n" +
                "邮箱:dlei0009@126.com,\n" +
                "热线电话:400-618-9080,400-618-1200,400-6185000,4006186666";
        // 1、定义爬取规则
        String regex = "(1[3-9]\\d{9})|(0\\d{2,7}-?\\d{4,19})|([\\w&&[^0]]\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2})"
                + "|(400(-?\\d{3,7}){2})";
        // 2、正则表达式封装成Pattern对象
        Pattern pattern = Pattern.compile(regex);
        // 3、通过Pattern对象获取查找内容的匹配器对象
        Matcher matcher = pattern.matcher(data);
        // 4、定义循环爬取信息
        while (matcher.find()) {
            String rs = matcher.group(); // 获取到找到的内容
            System.out.println(rs);
        }
    }
package com.itheima.regex;

import java.util.Arrays;

public class RegexTest4 {
    public static void main(String[] args) {
        // 1、public String replaceAll(String regex, String newStr):按照正则表达式匹配的内容进行替换
        // 需求1:请把 古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴,中间的非中文字符替换成"-"
        String s1 = "古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴";
        System.out.println(s1.replaceAll("\\w+", "-"));

        // 需求2(拓展):某语音系统,收到一个口吃的人说的“我我我喜欢编编编编编编编编编程程!”需要优化成“我喜欢编程!”
        /**
         *  (.) 一组,匹配任意字符
         *  \\1:为这个组声明一个组号:1号
         *  +:声明必须是重复的字
         *  $1可以去取到第一组代表的那个重复的字
         */
        String s2 = "我我我喜欢编编编编编编编编编程程!";
        System.out.println(s2.replaceAll("(.)\\1+", "$1"));

        // 2、public String[] split(String regex):按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组
        // 需求1:请把 古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴,中的人名获取出来
        String s3 = "古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴";
        String[] names = s3.split("\\w+");
        System.out.println(Arrays.toString(names));
    }
}

相关推荐

  1. 表达式

    2024-07-14 00:42:03       58 阅读
  2. 表达式

    2024-07-14 00:42:03       69 阅读
  3. 表达式

    2024-07-14 00:42:03       70 阅读
  4. 【Python】表达式

    2024-07-14 00:42:03       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 00:42:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 00:42:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 00:42:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 00:42:03       69 阅读

热门阅读

  1. ls命令学习记录2

    2024-07-14 00:42:03       21 阅读
  2. 无人机在应急救援中的几种应急方案

    2024-07-14 00:42:03       19 阅读
  3. compile gettext with vs

    2024-07-14 00:42:03       19 阅读
  4. 使机器人在执行任务倒快递

    2024-07-14 00:42:03       18 阅读