正则表达式介绍

正则表达式详细介绍

一、正则表达式基础概念

正则表达式(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
手机号码​ ^1[3-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地址 ^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$" 匹配ip地址
相关推荐
_Kayo_1 天前
JS 正则表达式
正则表达式
一次旅行1 天前
Jenkins实现CI/CD流水线
运维·servlet·ci/cd·jenkins·测试总结
小白学大数据2 天前
百科词条结构化抓取:Java 正则表达式与 XPath 解析对比
java·开发语言·爬虫·正则表达式
烛阴2 天前
C# 正则表达式(5):前瞻/后顾(Lookaround)——零宽断言做“条件校验”和“精确提取”
前端·正则表达式·c#
想学后端的前端工程师3 天前
【正则表达式实战指南:从入门到精通】
正则表达式
智航GIS3 天前
8.13 正则表达式
数据库·mysql·正则表达式
七夜zippoe4 天前
Spring WebFlux核心原理-对比Servlet与响应式模型
java·spring·servlet·长连接·webflux·短连接
上去我就QWER6 天前
你了解正则表达式中“?”的作用吗?
正则表达式