正则表达式介绍

正则表达式详细介绍

一、正则表达式基础概念

正则表达式(Regular Expression,简称 Regex 或 RegExp)是一种用于匹配和处理文本的强大工具,它通过特定的字符组合来描述文本模式。在编程、文本编辑器、命令行工具等场景中广泛应用,可用于文本搜索、替换、验证等操作。

二、正则表达式基本语法

1.普通字符

定义:直接匹配字符本身,包括字母、数字、标点符号等。

示例:

abc:匹配字符串中的abc子串。

123:匹配数字123。

2.特殊字符(元字符)

元字符具有特殊含义,需配合转义符\使用才能匹配字面量。

字符 功能 说明
. 匹配任意单个字符(除换行符\n外) a.c可匹配abc、a0c,但不匹配a\nc
^ 匹配字符串开头 ^abc仅匹配以abc开头的字符串
$ 匹配字符串结尾 abc$仅匹配以abc结尾的字符串
* 匹配前一个元素 0 次或多次 a*b可匹配b(a 出现 0 次)、ab、aab等
+ 匹配前一个元素 1 次或多次 a+b可匹配ab、aab,但不匹配b
? 匹配前一个元素 0 次或 1 次 a?b可匹配b、ab
{n} 匹配前一个元素恰好 n 次 a{2}b匹配aab
{n,} 匹配前一个元素至少 n 次 a{2,}b匹配aab、aaab等
{n,m} 匹配前一个元素 n 到 m 次 a{1,3}b匹配ab、aab、aaab
\[\] 字符集合,匹配其中任意一个字符 abc匹配a、b或c
\^ 否定字符集合,匹配不在其中的任意字符 \^abc匹配除a、b、c外的字符
- 字符范围 0-9匹配任意一个数字
\ 转义符,使元字符变为普通字符 .匹配.,*匹配*

3.预定义字符类

为常见字符集合提供简写形式:

字符类 等价形式 说明
\d 0-9 匹配数字
\D \^0-9 匹配非数字
\w a-zA-Z0-9_ 匹配字母、数字或下划线
\W \^a-zA-Z0-9_ 匹配非字母、数字或下划线
\s \\t\\n\\r\\f\\v 匹配空白字符(空格、制表符、换行符等)
\S \^ \\t\\n\\r\\f\\v 匹配非空白字符

4.分组与反向引用

字符类 功能 说明
() 将多个元素组合为一个整体 (ab)+匹配ab、abab、ababab等
\n 反向引用 (n 为数字)引用分组内容,用于匹配重复模式。(\d)\1匹配两个连续相同数字(如11、22)
(?:) 只分组不捕获,提升效率 匹配 1st, 2nd, 3rd, 4th,使用 (0-9+)(?:st|nd|rd|th)?。只有数字部分会被捕获

三、正则表达式高级用法

1.贪婪匹配与非贪婪匹配

贪婪与非贪婪匹配:默认情况下,量词(, +, ?, {})是贪婪的,会尽可能匹配更长的字符串。在量词后面加上一个 ?,就变为非贪婪(懒惰)模式,会尽可能匹配更短的字符串 。
例如,在字符串 "<div>content</div>"中,正则表达式 <.
>会贪婪地匹配整个字符串 "<div>content</div>",而 <.*?>则会非贪婪地匹配开始标签 "<div>"和结束标签 "</div>"。

2.零宽断言

用于指定匹配的位置,不消耗字符:

断言类型 语法 含义
正向先行断言 (?=pattern) 匹配右侧是pattern的位置
负向先行断言 (?!pattern) 匹配右侧不是pattern的位置
正向后发断言 (?<=pattern) 匹配左侧是pattern的位置
负向后发断言 (?<!pattern) 匹配左侧不是pattern的位置

例如:\d+(?=分)匹配分数(如99分中的99)。

3.分支结构

使用|表示 "或" 关系,按顺序匹配分支。

复制代码
示例:(https?|ftp)://匹配http://、https://或ftp://。

四、 常用正则表达式示例

用途 表达式 说明
电子邮箱​ ^\w+(.-?\w+)@\w+(.-?\w+)(.\w{2,3})+$ 匹配常见的邮箱格式,如 username@example.com
手机号码​ ^13-9\d{9}$ 匹配以1开头,第二位为3-9的中国大陆11位手机号
身份证号​ `^\d{15} \d{18}$`
中文字符​ ^\\u4e00-\\u9fa5+$ 匹配一个或多个中文字符
空白行​ \n\s*\r 匹配仅包含空白字符(空格、制表符)的行
URL网址​ ^https?: //\\w.-+(?:.\\w.-+)+/\\w ./-*$ 匹配以 http://或 https://开头的URL
IP地址 ^((20-4\d|250-5|01?\d\d?)\.){3}(20-4\d|250-5|01?\d\d?)$" 匹配ip地址
相关推荐
古城小栈13 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
踏着七彩祥云的小丑13 天前
Go学习第9天:并发编程 + 文件操作 + 正则表达式
学习·golang·正则表达式·go
bosins13 天前
密码复杂度验证正则表达式
正则表达式
sbjdhjd13 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
小森林之主13 天前
正则表达式零宽断言实战:凌晨3点的服务器报警
python·正则表达式·零宽断言·服务器报警·正则速查
小森林之主14 天前
Python re 模块速查:从实战对比中掌握正则表达式
python·正则表达式·性能测试·re模块·编程实战
ywl47081208714 天前
springSecurity+jwt,简单版demo
java·前端·servlet
飞天狗11114 天前
零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)
java·开发语言·前端·后端·servlet
程序猿零零漆14 天前
Python进阶之路:正则表达式、高级语法与核心数据结构(链表、二叉树)全解析
数据结构·python·正则表达式
飞天狗11115 天前
零基础JavaWeb入门——第4课:表单处理 —— 浏览器怎么把数据发给服务器
java·开发语言·前端·后端·servlet