正则表达式介绍

正则表达式详细介绍

一、正则表达式基础概念

正则表达式(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地址
相关推荐
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
长城20243 天前
HTML5中表单的pattern属性解析
前端·正则表达式·html·html5·pattern·pattern属性·pattern正则表达式
小道仙973 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest
Gss7773 天前
Linux 正则表达式详解(基础 + 扩展 + 实操)
linux·运维·正则表达式
黑客思维者3 天前
正则表达式(九)网络安全:检测SQL注入攻击 + 检测XSS跨站脚本 + 扫描敏感信息泄露 + 匹配暴力破解异常IP
sql·web安全·正则表达式
黎雁·泠崖3 天前
Java常用类核心详解(七):正则表达式 Regex 从入门到实战
java·开发语言·正则表达式
秀儿还能再秀3 天前
正则表达式核心语法 + Python的 re 库中常用方法
python·正则表达式
xcLeigh3 天前
Python入门:Python3 正则表达式全面学习教程
python·学习·正则表达式·教程·python3
数据知道4 天前
MongoDB 正则表达式查询:在 MongoDB 中实现模糊搜索与索引优化陷阱
数据库·mongodb·正则表达式
A懿轩A4 天前
【Java 基础编程】Java 正则表达式实战:Pattern/Matcher、元字符与常用正则,验证与提取必备
java·开发语言·正则表达式