正则表达式是计算机科学中处理字符串模式匹配和替换的强大工具,广泛应用于文本处理、数据校验、信息抽取等领域。以下是其核心考点梳理:
一、 语法基础与核心概念
-
普通字符:字母、数字、汉字等直接匹配自身。
-
元字符:
-
.:匹配除换行符外的任意单个字符。 -
\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 的引擎中)。
-
三、 编程应用考点(常见于面试)
-
函数与方法:在不同语言中,常用方法如:
-
测试匹配:
test()、match()、search() -
查找匹配:
match()、exec()、findall()、finditer() -
替换:
replace()、sub()、subn() -
分割:
split()
-
-
性能优化:
-
避免过度回溯,尤其是涉及嵌套量词时。
-
尽量使用具体字符代替通配符。
-
优先使用非贪婪匹配处理不定长文本。
-
-
常见陷阱
-
贪婪匹配导致意外结果。
-
忘记转义特殊字符。
-
对多行文本处理时,未正确使用
^和$与多行模式。
-
四、 实战例题
-
写一个正则,匹配中国大陆手机号(简单版,1开头,11位数字)。
- 答案:
^1\d{10}$
- 答案:
-
写一个正则,匹配 HTML 标签内的内容(不包含标签本身)。
- 答案:
(?<=>)[^<]+(?=</)(简化,需注意复杂情况)。
- 答案:
-
从字符串中提取所有日期(格式为 YYYY-MM-DD)。
- 答案:
\d{4}-\d{2}-\d{2}
- 答案:
五、 核心思想
正则表达式本质是定义一个字符串的匹配规则,核心在于精确描述所需模式,并理解引擎如何进行匹配、回溯与捕获。