掌握正则表达式:从入门到精通的实战指南

掌握正则表达式:从入门到精通的实战指南



🙋‍♂️ 作者:@whisperrr.🙋‍♂️

🎉 其他专栏:零基础学Mysql 🎉

💥 标题:掌握正则表达式:从入门到精通的实战指南💥

❣️ 寄语:比较是偷走幸福的小偷❣️

🌍一.正则表达式

❄️1.为什么学习正则表达式

我们先来看几个问题。

  • 给你一个字符串(或文章),请你找出所有四个数字连在一起的子串?
  • 给你一个字符串(或文章),请你找出所有四个数字连在一起的子串,并且这四个数字要满足:第一位与第四位相同,第二位与第三位相同,比如1221,5775
  • 请验证输入的邮件,是否符合电子邮件格式.
  • 请验证输入的手机号,是否符合手机号格式

解决之道,就在其中-----正则表达式。

❄️ 2.基本介绍

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。正则表达式用于执行字符串的搜索和/或替换操作,常用于数据验证、数据抓取、数据整理等场景。
简单的说:正则表达式是对字符串执行模式匹配的技术。

❄️3.分析底层实现

  1. matcher.find()

matcher.find()完成的任务

  1. 根据指定的规则,定位满足规则的子字符串(比如1234)
  2. 找到后,将 子字符串的索引位置记录到matcher对象的属性int [] groups;
  3. groups[0] = 0, 把该 子字符串的结束索引 + 1 记录到groups[1] = 4;
  4. 同时记录oldlast 的值为 子字符串的结束索引 + 1即为4;
  1. matcher.group(0)
   public String group(int group) {
   
   
        if (first < 0)
            throw new IllegalStateException("No match found");
        if (group < 0 || group > groupCount())
            throw new IndexOutOfBoundsException("No group " + group);
        if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
            return null;
        return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
    }
        小结
        1.如果正则表达式有()分组
        2.group(0)代表匹配的子字符串
        2.group(1)代表匹配的子字符串的第一组
        2.group(2)代表匹配的子字符串的第二组

🌍二.正则表达式的语法

正则表达式(Regular Expression)是一种强大的文本处理工具,它通过定义一种规则来对字符串进行模式匹配、搜索和替换。下面我会详细讲解正则表达式的各个方面。

❄️1.字符匹配

  • .:匹配除换行符之外的任意单个字符。
  • [abc]:匹配方括号内的任意一个字符(a、b 或 c)。
  • [^abc]:匹配不在方括号内的任意一个字符。
  • [a-z]:匹配从 a 到 z 的任意一个小写字母。
  • [A-Z]:匹配从 A 到 Z 的任意一个大写字母。
  • [0-9]:匹配从 0 到 9 的任意一个数字。
  • \d:匹配一个数字字符。等价于 [0-9]
  • \D:匹配一个非数字字符。等价于 [^0-9]
  • \w:匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_]
  • \W:匹配任何非单词字符。等价于 [^A-Za-z0-9_]
  • \s:匹配任何空白字符,包括空格、制表符、换行符等等。
  • \S:匹配任何非空白字符。

❄️2.量词

  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}:n 是一个非负整数,匹配确定的 n 次。
  • {n,}:至少匹配 n 次。
  • {n,m}:至少匹配 n 次且最多匹配 m 次。

❄️3.定位符

  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • \b:匹配一个单词边界,即字与空格间的位置。
  • \B:匹配非单词边界。

4.分组和引用

  • (exp):匹配 exp 并捕获文本到自动命名的组里。
  • (?:exp):匹配 exp 但不捕获匹配的文本。
  • \n:引用编号为 n 的捕获组匹配的文本。

❄️6.非贪婪匹配

默认情况下,量词都是贪婪的,会尽可能多地匹配字符。在量词后面加上 ? 可以使其变为非贪婪的,即尽可能少地匹配字符。

  • *?:非贪婪地匹配任意次。
  • +?:非贪婪地匹配一次或多次。
  • ??:非贪婪地匹配零次或一次。
  • {n,m}?:非贪婪地至少匹配 n 次且最多匹配 m 次。

❄️7.分支结构

可以使用 | 来表示分支结构,匹配符号左边的子表达式或右边的子表达式。

  • foo|bar:匹配 “foo” 或 “bar”。

❄️实际应用

在不同的编程语言中,正则表达式的语法和功能可能会有所不同,但基本概念是通用的。以下是一些使用正则表达式的例子:

package ***.lrx.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author 刘
 * @version 1.0
 */
public class RegExp08 {
   
   
    public static void main(String[] args) {
   
   

        String content = "https://www.bilibili.***/video/BV1oDU4YYEgT/?spm_id_from=333.1007.tianma.4-4-14.click";
        String regStr = "^((http|https)://)?([\\w-]+\\.)+[\\w-]+([\\w-#%&?.=/]*)?$";
        Pattern pattern = Pattern.***pile(regStr);
        Matcher matcher = pattern.
转载请说明出处内容投诉
CSS教程网 » 掌握正则表达式:从入门到精通的实战指南

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买