正则表达式快速入门

news/2025/3/12 8:11:47/

原文链接:https://kashima19960.github.io/2025/03/10/正则表达式快速入门/

前言

我写这篇文章,用来记录我平时使用正则表达式的方法,这样我在分享知识给大家的同时,也复习了一遍正则表达式。在你学习某个知识的时候,千万不要去像阅读手册一般去进行学习,因为手册的内容虽然非常详细且全面,但是其实你实际运用到的内容并不会很多,这个就是二八定律,正则表达式20%的内容,就足以够覆盖80%的使用场景了

什么是正则表达式

正则表达式的定义如下

正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子.

首先,你难道不觉得 “正则表达式” 这个名字莫名奇妙,难以理解吗?正则表达式的英文原文是 “Regular expression”(简称 regex 或 regexp)) 其中把regular换一个翻译——规则的,有规律的,所以Regular expression的意思就是有规则的表达式。怎么样?是不是比啥正则表达式好懂多了。

正则表达式的作用

正则表达式的作用,用一句话概括就是——精确匹配,比如

  • 文本搜索和替换
  • 表单验证(如邮箱、手机号验证)
  • 数据提取
  • 字符串解析

当你注册一个网站,一般都会对你的密码强度进行验证,或者强制要求你必须满足某种“规则”,不然不让你通过注册

这个验证方法就是通过正则表达式实现的

练习平台

正则表达式是一种工具,所以学会工具的最好秘诀是要多练,这里我推荐两种练习的平台

在线

regex101: build, test, and debug regex

这个平台的使用很容易,上面是输入正则表达式,下面输出要匹配的字符串

离线

现在很多的编辑器基本都支持用正则表达式搜索文本,比如Vscode,你可以自己找找自己用的编辑器有没有这个功能

正则表达式常用知识

这里我只列举最常用的,当你学会这些常用的入门后,可以再去看看其他教程,学习一下更高级的用法

直接匹配

直接匹配其实就是普通的文本搜索,不使用任何正则表达式的语法

元字符

正则表达式是由各个元字符组合而成的,元字符跟他原本的含义没有什么关系,只是正则表达式的作者就这样定义的,所以不用去思考为啥这个元字符会是这个意思的问题,把常用元字符的含义记下来就行了

基本匹配元字符

符号描述
.匹配除换行符外的任意字符
^匹配字符串开头
$匹配字符串结尾
\当想要把元字符当作普通字符进行匹配,就需要用 \进行转义

.是元字符中最简单的例子.
.匹配任意单个字符, 但不匹配换行符.

例如,a.c 匹配 “abc”, “adc”, “a#c” 等

^ 匹配字符串开头,$匹配字符串结尾

例如,^hello 匹配以 “hello” 开头的字符串,world$ 匹配以 “world” 结尾的字符串

\用来将元字符转义,当想要匹配的字符串是元字符时,就需要转义,否则会被当作正则表达式被识别

例如,\.能够匹配字符串中的 . 而不是识别成元字符

数量限定符号

符号描述示例
*匹配前面的表达式 0 次或多次a* 匹配 “”, “a”, “aa”, “aaa” 等
+匹配前面的表达式 1 次或多次a+ 匹配 “a”, “aa”, “aaa” 等,但不匹配 “”
?匹配前面的表达式 0 次或 1 次colou?r 匹配 “color” 或 “colour”
{n}匹配前面的表达式恰好 n 次a{3} 只匹配 “aaa”
{n,}匹配前面的表达式至少 n 次a{2,} 匹配 “aa”, “aaa” 等
{n,m}匹配前面的表达式 n 到 m 次a{2,4} 匹配 “aa”, “aaa”, "aaaa

这里我说几个我平时很常用的做法

.*,表示匹配任意字符0次或多次,说人话就是,单独使用会选中所有文本

然后呢,你可以用 .*结合 ^ 和 $,匹配特定字符串开头与特定字符串结尾的文本

比如用 ^hello.*world 匹配hello开头,world结尾的字符串

markdown引用图片的格式为 ![](),当你想删除一个markdown文件中的所有图片引用的时候,就可以使用 !\[.* 来匹配所有图片的引用

字符集和特殊字符

符号描述示例
[abc]匹配方括号中的任意一个字符[abc] 匹配 “a”, “b” 或 “c”
[^abc]匹配除方括号中字符外的任意字符[^abc] 匹配 “d”, “e” 等,但不匹配 “a”, “b”, “c”
[a-z]匹配指定范围内的任意字符[a-z] 匹配任意小写字母
\d匹配数字,等价于 [0-9]\d{3} 匹配三个数字
\w匹配字母、数字、下划线,等价于 [a-zA-Z0-9_]\w+ 匹配一个或多个字母/数字/下划线
\s匹配空白字符(空格、制表符、换行等)\s 匹配一个空格
\D匹配非数字字符\D+ 匹配一个或多个非数字字符
\W匹配非字母、数字、下划线的字符\W 匹配如 “#”, “@” 等符号
\S匹配非空白字符\S+ 匹配一个或多个非空白字符

特殊字符常用的就这几个,我教你怎么更容易记住

  • \d的是digital,数字的意思,
  • \w的是word,字词的意思
  • \s的是space,按下空格键会输入空格符,所以\s匹配空格符
  • 大写字母和小写字母互为反义词,\d匹配数字,那\D就用来匹配非数字

是不是很容易记,看着很多,其实都是有规律的

这里我介绍一下 ||或运算符就表示或, 用作判断条件.,可以结合 []一起使用,来实现敏感词过滤

fuck|shit|[傻煞沙][比笔逼叉缺吊碉雕]

结语

学会上面的这些,大多数的基础正则表达式,你基本都能看懂了,如果有些复杂的表达式有高级用法,等用到的时候再去看就行。以下是一些注意事项

  • 在现实中,如果不是非常特定的需求,我都是建议直接在网上用别人写好的正则表达式,因为正则表达式是由元字符构成的,一旦很长,可读性极其差,比如 ^(?!(.*?[A-Za-z0-9])\1{5,})(?=(?:.*?[A-Z]){2,})(?=(?:.*?[a-z]){2,})(?=(?:.*?[0-9]){2,})(?=.*?[!@#$%^&*()_+\-=\[\]{}|;':",.<>/?])(?!.*?(?:admin|root|password|123456|qwerty))(?!.*?(?:(.)\1{2,}))(?:[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*)*\+?)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*)*)?@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$
  • 让你学会正则表达式,最根本是让你能看懂,而不是让你能写出来,所以我都是建议你直接用ai写,然后根据ai给出的表达式对你特定的场景进行优化就行,等你看的多了,自然就能写出来了

这里我附上一些经典的参考资料

  1. 常用正则表达式大全
  2. 正则表达式30分钟入门教程 - deerchao - 博客园
  3. 简介 | 正则表达式30分钟入门教程

http://www.ppmy.cn/news/1578556.html

相关文章

前端开发中的设计模式:观察者模式的应用与实践

1. 引言 1.1 设计模式的重要性 设计模式是软件开发中经过验证的解决方案&#xff0c;能够帮助开发者解决常见的设计问题。在前端开发中&#xff0c;合理使用设计模式可以提高代码的可维护性、可扩展性和复用性。 1.2 本文的目标 本文旨在深入探讨观察者模式在前端开发中的应…

Python数据分析之机器学习基础

Python 数据分析重点知识点 本系列不同其他的知识点讲解&#xff0c;力求通过例子让新同学学习用法&#xff0c;帮助老同学快速回忆知识点 可视化系列&#xff1a; Python基础数据分析工具数据处理与分析数据可视化机器学习基础 五、机器学习基础 了解机器学习概念、分类及…

HTML左右分页2【搬代码】

HTML左右分页2 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>左右分页布局</title>&l…

清华同方国产电脑能改windows吗_清华同方国产系统改win7教程

清华同方国产电脑能改windows吗&#xff1f;清华同方国产电脑如果采用的是兆芯kx-6000系列或kx-7000系列以及海光c86 3250 3350 X86架构处理器可以安装windows。在安装win7时bios中要关闭“安全启动”和开启legacy传统模式支持&#xff0c;如果是NVME接口的固态硬盘&#xff0c…

Tomcat+Servlet运行后出现404错误解决方案

TomcatServlet运行后出现404错误解决方案 一、错误效果复现 后续的解决方案&#xff0c;仅仅针对我遇到的情况。对不能涵盖大部分情况感到抱歉。 二、错误分析 先看看源代码&#xff1f; package com.example.secondclass.Servlet; import java.io.*; import jakarta.servl…

AI日报 - 2025年3月12日

AI日报 - 2025年3月12日 &#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | Anthropic CEO预测AI将主导代码编写 &#x1f52c; 自训练技术显著提升LLM思维清晰度 ▎&#x1f4bc; 商业动向 | OpenAI与CoreWeave达成119亿美元基建协议 &…

macOS 终端优化

macOS 安装、优化、还原、升级 Oh My Zsh 完全指南 &#x1f680; Oh My Zsh 是 macOS 终端增强的利器&#xff0c;它能提供强大的自动补全、主题定制和插件支持&#xff0c;让你的终端更高效、更炫酷。本文将全面介绍 如何安装、优化、还原、重新安装和升级 Oh My Zsh&#x…

从零开始学机器学习——了解分类算法

分类算法 首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 分类算法是监督学习的一种重要方法,它与回归算法在许多方面有相似之处。监督学习的核心目标是利用已有的数据集进行预测,无论是数值型数据还是类别型数据。具体而言,分类算法主要用于将输入…