正则表达式是一种文本模式描述语言,属于形式语言理论中正则文法的实践实现,是声明式字符串匹配与处理规则系统;核心操作为匹配、提取、替换;按引擎分POSIX BRE/ERE与PCRE系;非编程语言、非数据类型,须依附宿主语言函数执行。

正则表达式是“模式匹配引擎”的输入规范
它不执行逻辑分支或变量赋值,也不具备图灵完备性(基础正则不支持递归/嵌套计数),其本质是:给定一个字符串和一个模式,回答“是否匹配”或“在哪里匹配”。主流语言(如 Python 的 re、JavaScript 的 RegExp、Java 的 java.util.regex)都通过内置或标准库提供**正则引擎**来解析和执行该规范。
按功能用途分三类核心操作
几乎所有正则使用场景都落在以下三类中,且不同语言/工具对这三类的支持程度和语法略有差异:
-
匹配(match):判断目标字符串是否符合某规则,例如用
/^\d{11}$/验证手机号长度;返回布尔值或匹配对象 -
提取(search / capture):从文本中抓取子串,依赖捕获组
(...)和反向引用,例如/name: (\w+)/中的$1取出名字 -
替换(replace):基于匹配结果做文本置换,如 JavaScript 的
str.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3')格式化电话
按实现机制分“POSIX BRE/ERE”与“PCRE 系”两大阵营
这是开发者最容易踩坑的底层分类,直接影响元字符行为:
-
grep默认用 POSIX BRE(Basic Regular Expressions),+、?、{}需加反斜杠才生效,即写成\+ -
egrep或grep -E用 ERE(Extended),支持+、?、|直接使用 - Perl、PHP、Python
re、JavaScript、.NET 等普遍采用 PCRE(Perl Compatible Regular Expressions)或其变种,功能最全,支持命名捕获(?<year>\d{4})、零宽断言(?=<div>)等高级特性
跨工具迁移正则时,务必先确认目标环境的引擎类型——把 Python 里写的 (?i)hello 直接丢进老版本 sed 会静默失败。
它不属于“类型系统”里的任何 type,但常被误当作类型
比如有人写 TypeScript 类型守卫 if (s instanceof RegExp) ——错,RegExp 是构造函数,不是类型;也有人在 JSON Schema 里试图用正则当字段类型——其实只是 pattern 关键字的校验规则。正则永远依附于宿主语言的字符串操作函数存在,脱离 re.search() 或 .test() 就只是普通字符串。
真正容易被忽略的是:同一个正则,在不同引擎中可能因回溯控制、Unicode 支持、换行符处理(^/$ 是否匹配 \n 前后)而行为不一致。写完一定要在目标运行环境下实测,别只信在线 regex tester 的结果。

















