正则表达式介绍

正则表达式详细介绍

一、正则表达式基础概念

正则表达式(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地址
相关推荐
互联网中的一颗神经元4 小时前
小白python入门 - 23. Python 正则表达式的应用
python·正则表达式
码上有光4 小时前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
2501_936415691 天前
API-正则表达式&时间&包装类
正则表达式
圣光SG2 天前
Servlet学习笔记
笔记·学习·servlet
鹤卿1234 天前
谓词与正则表达式(OC)
ios·正则表达式·objective-c·xcode
aduzhe5 天前
关于lib文件格式(keil/unix)
服务器·unix
智码看视界5 天前
Tomcat架构深度拆解:Connector和Container到底怎么配合的?
java·servlet·架构·tomcat·web服务器
饼干哥哥7 天前
10.5% 深层转化、90%+ 新用户,ChatGPT Ads 值得吗?
算法·正则表达式·编程语言
饼干哥哥8 天前
Seedance TK视频「真人感」问题的 9 个解法
正则表达式·代码规范·设计
逝水无殇9 天前
C# 正则表达式详解
开发语言·后端·正则表达式·c#