正则表达式速查表

步 1 / 3 33%

选择正则表达式引擎

先选择您使用的引擎。参考表会隐藏不适用于该选择的语法。

在将常用正则表达式语法粘贴到代码前,可用此互动参考表进行比较。选择 JavaScript、PCRE2/PHP、Python re、.NET 或所有引擎视图,再选择主题并搜索显示的条目。某个标记在一个引擎中能编译,在另一个引擎中可能被拒绝或有不同含义,因此参考表会标出仅属于某一类的语法。搜索和复制均在浏览器中完成,本页不会对您的文本运行模式。

如何使用正则表达式速查表

  1. 1

    选择引擎

    从 JavaScript、PCRE2/PHP、Python re、.NET 开始,或比较全部。聚焦视图会省略不适用于所选引擎的条目。

  2. 2

    选择主题

    打开锚点、字符类、量词、分组、前瞻后顾、常见模式形状,或标志和选项。

  3. 3

    在本地搜索和复制

    直接在页面中搜索标记和说明,然后选择标记进行复制。搜索文字不会发送到服务器,也不会添加到 URL。

  4. 4

    在实际运行时验证

    在项目中使用相应的引擎、标志和 API 编译并测试最终表达式。此参考表解释语法,不验证生产数据。

兼容性很重要

正则表达式不是一种通用语言。此速查表将看似相同、却不能在各引擎间直接迁移的语法分开列出。

功能 JavaScript RegExp PCRE2 / PHP Python re .NET
绝对开头 不支持 \A \A \A \A
绝对结尾 不支持 \z \z \Z \z
Unicode 属性 \p{L} 使用 uv 模式 支持 内置 re 不支持 支持
命名捕获 (?<name>...) (?<name>...)(?P<name>...) (?P<name>...) (?<name>...)
命名反向引用 \k<name> \k<name>(?P=name) (?P=name) \k<name>
全局匹配 g 标志加匹配 API preg_match_all 等重复匹配 API finditer 等重复匹配 API Matches 等重复匹配 API

\d\w 需要格外注意。在 JavaScript 中,\d 始终是 ASCII 数字 0-9,即使加入 u\w 本质上仍是 ASCII 单词字符。其他引擎可根据模式和配置应用 Unicode 规则。若 Unicode 行为很重要,请写出并测试确切所需的属性或字符类。

锚点和边界

标记 表示的内容 可移植性说明
^ 输入开头,或多行模式中的行首 四类引擎都支持。
$ 输入结尾,或多行模式中的行尾 四类引擎都支持;末尾换行的细节不同。
\b 单词边界 单词字符的定义取决于引擎和模式。
\A 目标字符串绝对开头 PCRE2、Python 和 .NET;JavaScript 不支持。
\z 目标字符串绝对结尾 PCRE2 和 .NET;Python 使用 \Z
\Z Python 目标字符串结尾 PCRE2 和 .NET 也可在最后一个换行前匹配;绝对结尾请使用 \z

分组和前瞻后顾

标记 含义 重要限制
(abc) 捕获组 四类引擎都支持。
(?:abc) 非捕获组 四类引擎都支持。
(?<name>abc) 命名组 JavaScript、PCRE2 和 .NET 语法。
(?P<name>abc) 命名组 Python 语法;PCRE2 也接受。
(?=abc) / (?!abc) 正向 / 负向前瞻 四类引擎都支持。
(?<=abc) / (?<!abc) 正向 / 负向后顾 四类引擎都支持,但允许的后顾长度不同。

后顾是常见的可移植性陷阱。Python re 需要固定宽度后顾。JavaScript 是否支持取决于部署的运行时。不要只依赖速查表中的一行,应在您支持的最旧运行时中测试确切模式。

模式形状,不是完整验证器

常见模式条目有意只描述形状。例如,^\d{4}-\d{2}-\d{2}$ 会接受 2026-99-99,简单的电子邮件形状模式也无法实现完整的电子邮件地址标准。完成初步格式检查后,请使用合适的库解析日期、URL 和结构化标识符。

形状 示例模式 不能证明什么
带符号小数 ^-?\d+(?:\.\d+)?$ 本地小数标记、分组、数值范围或精度。
电子邮件形状文本 ^[\w.+-]+@[\w-]+\.[\w.-]+$ 可投递或完全符合标准的电子邮件地址。
HTTP(S) URL 形状文本 ^https?://\S+$ 安全、可解析或可访问的 URL。
ISO 日期形状 ^\d{4}-\d{2}-\d{2}$ 真实的日历日期。
ASCII slug 字符 ^[A-Za-z0-9_-]+$ 您的应用的大小写、分隔符或保留字规则。

标志和选项

未检查宿主 API 前不要复制标志。JavaScript 写作 /pattern/g,Python 传入 re.Ire.X,.NET 可使用 RegexOptions,而 PCRE2/PHP 通常使用分隔符和尾随修饰符。g 是 JavaScript 的全局匹配标志,不是 PCRE2 修饰符;重复 PCRE2 匹配通常由 PHP API 控制。扩展模式 x 可用于 PCRE2、Python 和 .NET,但不是 JavaScript 标志。

常见问题

不会。这是带有浏览器本地搜索和复制控件的语法参考表。请使用正则表达式测试器以及应用所用的运行时来编译模式,并测试有代表性的输入。

有些看起来熟悉的标记并不可移植。例如,Python 内置 re 对命名组使用 (?P<name>…),JavaScript 使用 (?<name>…),而 JavaScript 不支持绝对锚点 \A 或 \z。

不支持。在 JavaScript 中,\d 是 ASCII 数字,即使带有 u 标志,\w 也本质上是 ASCII 单词字符。其他引擎具有不同的 Unicode 模式和选项,因此请测试数据所需的行为。

只能把它们当作快速形状检查。它们不能证明电子邮件地址可投递、URL 安全或可访问、日期存在于日历中。生产规则应使用专用解析器或验证器。

相关工具