当前位置:

首页 > 编程开发 > RegExp正则表达式基础语法示例教程

RegExp正则表达式基础语法示例教程

本文目录

    简介 很多时候,特别是写程序或者处理网页文本的时候,我们都有过这样的需求:要从一堆字符串里,把符合某种复杂规则的给揪出来。正则表达式,就是用来干这个的——它本质上是一套描述文本规则的代码,一门专门用来匹配字符串的“小语言”。 用通配符类比一下就很好理解了。Windows/Dos下搜索文件,大家都用过

    简介

    很多时候,特别是写程序或者处理网页文本的时候,我们都有过这样的需求:要从一堆字符串里,把符合某种复杂规则的给揪出来。正则表达式,就是用来干这个的——它本质上是一套描述文本规则的代码,一门专门用来匹配字符串的“小语言”。

    用通配符类比一下就很好理解了。Windows/Dos下搜索文件,大家都用过*和?吧?比如搜*.doc就是把所有Word文档都找出来。这里的*被解释成“任意字符串”。正则表达式干的事类似,但更精准——当然,也更复杂。

    比如,你在英文小说里找“hi”,直接写个正则表达式 hi 就行。

    这几乎是最简单的正则了,它就匹配两个字符:前一个h,后一个i。大部分工具还支持忽略大小写,勾上之后,hi、HI、Hi、hI都能匹配上。

    但问题来了——很多单词都包含“hi”,比如him、history、high。要是光用hi去搜,这些词里的“hi”也会被找出来。要是只想找“hi”这个独立的单词,就得用\bhi\b。

    这里的\b是个特别的符号,我们叫它元字符,它代表单词的边界——也就是单词开头或结尾的位置。注意,它不是匹配空格、标点符号这些字符本身,而是匹配一个位置。

    再复杂一点,如果你想找“hi”后面不远处跟着一个“Lucy”,那就可以写\bhi\b.*\bLucy\b。

    这里.是另一个元字符,匹配除了换行符以外的任意字符。而*也是元字符,但它不匹配字符,也不匹配位置,而是表示数量——它说明前面的内容可以重复任意次,直到整个表达式匹配成功。

    所以.*连在一起,意思就是“任意数量的任意字符(但不能有换行)”。那么\bhi\b.*\bLucy\b的含义就很清楚了:先是一个独立的单词hi,然后是一堆任意字符,最后是独立的单词Lucy。

    组合使用更多元字符,能构造出更强大的表达式。比如这个:0\d\d-\d\d\d\d\d\d\d\d,匹配的是以0开头,跟两个数字,然后一个连字符,最后是8个数字——标准的中国电话号码格式(仅限3位区号)。

    这里的\d是新的元字符,匹配一个数字(0~9里的任意一个)。-不是元字符,就匹配它本身,也就是连字符。

    不想写那么多重复的\d?可以简写为0\d{2}-\d{8}。这里的{2}和{8}表示前面的\d必须连续重复匹配2次、8次。

    总的来说,正则表达式就是一种专门用来匹配字符串的编程语言。它一般不单独用,而是结合具体编程语言(比如C++、Python、Perl)或工具(比如vim)来使用。

    在线工具

    正则表达式写起来确实有点绕,好在有不少在线工具可以帮你验证表达式对不对。

    • Regulex:一个Ja vaScript正则表达式可视化工具,边写边看匹配过程,很直观。

    元字符

    基本元字符用一张表汇总一下,平时当速查手册用很方便。

    Metacharacter Descriptions Examples
    \ 转义字符,使后面的字符失去特殊含义或者标记为特殊字符 \. 匹配实际的点号而不是任意字符,\n 匹配一个换行符
    ^ 匹配字符串的开始位置 ^abc 匹配以 abc 开头的字符串
    $ 匹配字符串的结束位置 xyz$ 匹配以“xyz”结尾的字符串
    . 匹配除换行符(\n)外的任意单个字符 a.b 匹配“aab”, “a1b”, “a b” 等
    * 匹配前面的子表达式零次或多次 zo* 能匹配“z” 以及“zoo”
    + 匹配前面的子表达式 1 次或多次 zo+ 能匹配“zo” 以及“zoo”,但不能匹配“z”
    ? 匹配前面的子表达式零次或一次 do(es)? 可以匹配“do” 或“does”
    {n} n 是一个非负整数。匹配确定的 n 次 o{2} 不能匹配“Bob” 中的‘o’,但是能匹配“food” 中的两个 o
    {n,} n 是一个非负整数。至少匹配n 次 o{2,} 不能匹配“Bob” 中的‘o’,但能匹配“foooood” 中的所有 o
    {n,m} m 和 n 均为非负整数,其中n ≤ m。最少匹配 n 次且最多匹配 m 次 o{1,3} 匹配“fooooood” 中的前三个 o
    x|y 匹配 x 或 y z|food 能匹配“z” 或“food”
    [xyz] 字符集合。匹配所包含的任意一个字符 [abc] 可以匹配“plain” 中的‘a’。
    [^xyz] 负值字符集合。匹配未包含的任意字符 [^abc] 可以匹配“plain” 中的’p’、‘l’、‘i’、‘n’
    [a-z] 字符范围。匹配指定范围内的任意字符 [a-z] 可以匹配‘a’ 到‘z’ 范围内的任意小写字母字符
    [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符 [^a-z] 可以匹配任何不在‘a’ 到‘z’ 范围内的任意字符
    \b 匹配一个单词边界,也就是指单词和空格间的位置 er\b 可以匹配“never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’
    \B 匹配非单词边界 er\B 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’
    \cx 匹配由 x 指明的控制字符,x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符 \cM 匹配一个 Control-M 或回车符
    \d 匹配一个数字字符 等价于 [0-9]
    \D 匹配一个非数字字符 等价于 [^0-9]
    \f 匹配一个换页符 等价于 \x0c 和 \cL
    \n 匹配一个换行符 等价于 \x0a 和 \cJ
    \r 匹配一个回车符 等价于 \x0d 和 \cM
    \s 匹配任何空白字符,包括空格、制表符、换页符等等 等价于 [ \f\n\r\t\v]
    \S 匹配任何非空白字符 等价于 [^ \f\n\r\t\v]
    \t 匹配一个制表符 等价于 \x09 和 \cI
    \v 匹配一个垂直制表符 等价于 \x0b 和 \cK
    \w 匹配字母、数字、下划线 等价于 [A-Za-z0-9_]
    \W 匹配非字母、数字、下划线 等价于 [^A-Za-z0-9_]

    分组与引用

    直接在字符后面加上限定符,就能重复单个字符。但要是想重复多个字符呢?比如重复“ab”,这就得用上小括号了——它用来指定一个子表达式,也叫分组,然后在这个分组后面加上重复次数。

    举个例子:(ab)+ 可以匹配“ab”、“abab”、“ababab”,但不能匹配“a”或“b”。

    • 捕获分组

    正则表达式里有几种不同类型的分组。捕获分组是最常见的,它会捕获匹配到的内容,并自动分配一个编号(从1开始)。之后通过这个编号就能引用分组里的内容。

    一个典型例子:

    (\d{4})-(\d{2})-(\d{2})  # 匹配日期格式 YYYY-MM-DD

    这个表达式会创建3个分组:① 4位数字的年份;② 2位数字的月份;③ 2位数字的日期。

    • 分组引用

    分组最强大的功能之一,就是可以在正则表达式内部或外部引用已经匹配到的内容。

    在正则表达式内部引用前面的分组,用 \num 这种写法,num就是分组索引。

    (\w+) \1  # 匹配重复的单词,如 "hello hello"

    这个模式会匹配两个相同的单词,中间用空格隔开。这里的 \1 就是对第一个分组的引用。

    • 非捕获分组

    用 (?:pattern) 语法,可以实现只分组,但不捕获。比如 (?:Mr|Ms|Mrs)\. (\w+) 匹配“Mr. Smith”,但只捕获“Smith”这部分。

    • 命名分组与引用

    在一些高级语言里,还可以给分组起个名字,增强可读性。不同语言的语法不太一样。

    以Python为例:

    ### Named Capturing Group(?P\d{4})-(?P\d{2})-(?P\d{2})### Reference(?P\w+) (?P=word) 

    运算符优先级

    正则表达式从左到右计算,遵循优先级顺序,跟算术表达式很像。相同优先级的从左到右,不同优先级的先高后低。

    具体的优先级顺序如下:

    优先级 运算符 描述
    1 \ 转义符
    2 ()、[] 圆括号和方括号
    3 *、 +、 ?、 {n}、{n,}、{n,m} 限定符
    4 ^、$、\任何元字符、任何字符 定位点和序列(即:位置和顺序)
    5 | “或”操作

    贪婪模式

    默认情况下,正则表达式里的限定符都是“贪婪”的——它们会尽可能多地匹配字符。以a.*b为例,搜aabab的话,它会匹配整个字符串aabab,因为这是最长的、以a开头以b结尾的字符串。这种行为叫贪婪匹配。

    但有时候我们想要相反的——懒惰匹配,也就是尽可能少地匹配。只要在限定符后面加个?,就变成懒惰模式了。比如.*?就表示“匹配任意数量的重复,但能用最少的就用最少的”。

    同样以a.*?b为例,它匹配的是最短的、以a开头以b结尾的字符串。如果用来搜aabab,它会匹配到aab(第1到第3个字符)和ab(第4到第5个字符)。

    注意,第一个匹配是aab而不是ab(第2到第3个字符),这是因为正则表达式里还有一条规则,优先级比贪婪/懒惰更高:最先开始的匹配拥有最高优先权。

    其他重复限定符也都支持用?进入懒惰模式:

    RegExp正则表达式基础语法示例教程

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发
    相关文章 更多
    PHP递归性能优化技巧与迭代替代方案
    PHP递归性能优化技巧与迭代替代方案

    解析PHP递归函数在树形数据处理中的性能瓶颈,提供预加载数据消除I/O、使用显式栈替代深层递归的实战方案,帮助开发者在代码可读性与执行效率间做出合理取舍。

    Java测试中怎么使用Mockito模拟依赖对象
    Java测试中怎么使用Mockito模拟依赖对象

    详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。