正则表达式考点

正则表达式是计算机科学中处理字符串模式匹配和替换的强大工具,广泛应用于文本处理、数据校验、信息抽取等领域。以下是其核心考点梳理:

一、 语法基础与核心概念

  • 普通字符:字母、数字、汉字等直接匹配自身。

  • 元字符:

    • .:匹配除换行符外的任意单个字符。

    • \d与 \D:匹配数字 / 非数字。

    • \w与 \W:匹配单词字符(字母、数字、下划线)/ 非单词字符。

    • \s与 \S:匹配空白字符(空格、制表符等)/ 非空白字符。

    • ^与 $:匹配字符串的开始与结束。

  • 字符类 :[abc]匹配 a、b 或 c 中的任意一个;[^abc]匹配任意不包含在其中的字符。

  • 量词

    • *:匹配前面的子表达式零次或多次。

    • +:一次或多次。

    • ?:零次或一次。

    • {n}:恰好 n 次。

    • {n,}:至少 n 次。

    • {n,m}:至少 n 次,至多 m 次。

  • 贪婪与非贪婪匹配 :默认量词是贪婪的(尽可能多匹配),在其后加 ?变为非贪婪(惰性,尽可能少匹配)。

  • 选择、分组与引用

    • |:表示"或"关系。

    • (pattern):分组,可捕获子匹配。(?:pattern)为非捕获分组。

    • \1, \2:向后引用,引用前面第 n 个分组捕获的内容。

  • 零宽断言

    • (?=pattern):正向肯定预查(先行断言),匹配位置后需满足 pattern。

    • (?!pattern):正向否定预查。

    • (?<=pattern):反向肯定预查(后行断言),匹配位置前需满足 pattern。

    • (?<!pattern):反向否定预查。

二、 进阶与易混淆点

  • 转义 :在正则中,元字符 .、*、+、?、\`、`、`、(、)、{、}、^、$、|等有特殊含义,要匹配它们本身,需用反斜杠`转义。在编程语言字符串中,正则字面量通常写在字符串内,需注意语言本身的反斜杠转义规则,常需双重转义(如 \\d匹配数字)。

  • 模式修饰符 :如 i(忽略大小写)、g(全局匹配)、m(多行模式,使 ^和 $匹配行首行尾)、s(单行模式,使 .也能匹配换行符)。

  • 常用模式示例

    • 匹配整数:-?\d+

    • 匹配浮点数:-?\d+(\.\d+)?

    • 匹配邮箱(简化版):\w+@\w+\.\w+

    • 匹配 URL(简化版):https?://[^\s]+

    • 匹配中文字符:[\u4e00-\u9fa5](在支持 Unicode 的引擎中)。

三、 编程应用考点(常见于面试)

  1. 函数与方法:在不同语言中,常用方法如:

    • 测试匹配:test()、match()、search()

    • 查找匹配:match()、exec()、findall()、finditer()

    • 替换:replace()、sub()、subn()

    • 分割:split()

  2. 性能优化:

    • 避免过度回溯,尤其是涉及嵌套量词时。

    • 尽量使用具体字符代替通配符。

    • 优先使用非贪婪匹配处理不定长文本。

  3. 常见陷阱

    • 贪婪匹配导致意外结果。

    • 忘记转义特殊字符。

    • 对多行文本处理时,未正确使用 ^和 $与多行模式。

四、 实战例题

  1. 写一个正则,匹配中国大陆手机号(简单版,1开头,11位数字)。

    • 答案:^1\d{10}$
  2. 写一个正则,匹配 HTML 标签内的内容(不包含标签本身)。

    • 答案:(?<=>)[^<]+(?=</)(简化,需注意复杂情况)。
  3. 从字符串中提取所有日期(格式为 YYYY-MM-DD)。

    • 答案:\d{4}-\d{2}-\d{2}

五、 核心思想

正则表达式本质是定义一个字符串的匹配规则,核心在于精确描述所需模式,并理解引擎如何进行匹配、回溯与捕获。

相关推荐
夏天的清晨2 分钟前
C++入门学习
开发语言·c++·学习
IT_陈寒3 分钟前
SpringBoot自动配置的坑我帮你踩过了
前端·人工智能·后端
代码山河5 分钟前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目
新鲜势力呀5 分钟前
PHP 文件上传系统实战:从上传卡顿到分片上传 + 秒传 + 云存储架构完整优化方案
开发语言·架构·php
vx_Biye_Design6 分钟前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
李游Leo7 分钟前
HarmonyOS 7 QuickDock 闪控窗开发实录 02:floatView × floatingBall:形态切换、位置恢复与单一状态源【鸿蒙心迹】
java·华为·harmonyos
企业数字化笔记8 分钟前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频
仍然.14 分钟前
Redis---主从复制
java·数据库·redis
vx_Biye_Design17 分钟前
springboot咖啡厅顾客点单管理系统12080-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
QQ_216962909621 分钟前
基于微信小程序的智能膳食分析系统
java·大数据·spring boot·微信小程序·小程序·旅游