本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS 提要和博客 |
由于某些字符类经常使用,因此提供了一系列简写字符类。 \d 是 [0-9] 的缩写。在大多数支持 Unicode 的版本中,\d 包括所有脚本中的所有数字。值得注意的例外是 Java、JavaScript 和 PCRE。这些 Unicode 版本仅使用 \d 匹配 ASCII 数字。
\w 表示“单词字符”。它始终匹配 ASCII 字符 [A-Za-z0-9_]。请注意下划线和数字的包含。在支持 Unicode 的大多数风格中,\w 包括来自其他脚本的许多字符。关于实际包含哪些字符存在很多不一致之处。一般包括字母表脚本和表意文字的字母和数字。下划线以外的连接标点符号和非数字的数字符号可能包含或不包含。 XML 架构 和 XPath 甚至包括 \w 中的所有符号。同样,Java、JavaScript 和 PCRE 仅使用 \w 匹配 ASCII 字符。
\s 表示“空白字符”。同样,这实际包含哪些字符取决于正则表达式风格。在本教程中讨论的所有风格中,它包括 [ \t\r\n\f]。也就是说:\s 匹配空格、制表符、回车符、换行符或换页符。大多数风格还包括垂直制表符,其中 Perl(5.18 版之前)和 PCRE(8.34 版之前)是值得注意的例外。在支持 Unicode 的风格中,\s 通常包括 Unicode“分隔符”类别中的所有字符。 Java 和 PCRE 再次成为例外。但是 JavaScript 确实使用 \s 匹配所有 Unicode 空白。
简写字符类可以在方括号内和方括号外使用。 \s\d 匹配一个空白字符后跟一个数字。 [\s\d] 匹配一个既是空白又是数字的单个字符。当应用于 1 + 2 = 3 时,前一个正则表达式匹配 2(空格二),而后一个正则表达式匹配 1(一)。 [\da-fA-F] 匹配一个十六进制数字,如果你的风格仅使用 \d 匹配 ASCII 字符,则等同于 [0-9a-fA-F]。
以上三个速记也有否定版本。\D 与 [^\d] 相同,\W 是 [^\w] 的缩写,\S 等同于 [^\s]。
在方括号内使用否定速记时要小心。[\D\S] 不等于 [^\d\s]。后者匹配既不是数字也不是空白字符的任何字符。它匹配 x,但不匹配 8。然而,前者匹配既不是数字也不是空白字符的任何字符。因为所有数字都不是空白字符,所有空白字符都不是数字,所以 [\D\S] 匹配任何字符;数字、空白字符或其他字符。
虽然对 \d、\s 和 \w 的支持非常普遍,但有些正则表达式风格支持额外的速记字符类。Perl 5.10 引入了 \h 和 \v。\h 匹配水平空白字符,其中包括制表符和 Unicode “空格分隔符”类别中的所有字符。它与 [\t\p{Zs}] 相同。\v 匹配“垂直空白字符”,其中包括 Unicode 标准中被视为换行符的所有字符。它与 [\n\cK\f\r\x85\x{2028}\x{2029}] 相同。
PCRE 从 7.2 版开始也支持 \h 和 \v。PHP 从 5.2.2 版开始支持,Java 从 8 版开始支持,JGsoft 引擎 从 2 版开始支持。
如果你的风格支持 \h 和 \v,那么你肯定应该在只匹配一种类型的空白时使用它们,而不是 \s。使用 \h 而不是 \s 来匹配空格和制表符,可以确保你的正则表达式匹配不会意外地溢出到下一行。
在许多其他正则表达式风格中,\v 只匹配 垂直制表符 字符。Perl、PCRE 和 PHP 从未支持过此功能,因此它们可以自由地为 \v 赋予不同的含义。Java 4 至 7 和 JGsoft V1 确实使用 \v 来只匹配垂直制表符。Java 8 和 JGsoft V2 comunque 改变了此令牌的含义。垂直制表符也是一个垂直空白字符。为了避免混淆,上文使用 \cK 来表示垂直制表符。
Boost 从 1.42 版开始支持 \h。Boost 1.42 及更高版本支持 \v,但仅在字符类之外作为速记。 [\v] 在 Boost 中只匹配垂直制表符。
Ruby 1.9 及更高版本有自己的 \h 版本。它匹配单个十六进制数字,就像 [0-9a-fA-F] 一样。 \v 在 Ruby 中是垂直制表符。
XML Schema、XPath 和 JGsoft V2 正则表达式支持其他四个速记,而其他任何正则表达式风格都不支持。 \i 匹配可以作为 XML 名称第一个字符的任何字符。 \c 匹配可以在 XML 名称的第一个字符后出现的任何字符。 \I 和 \C 分别是取反的速记。请注意,\c 速记语法与许多其他正则表达式风格中使用的 控制字符 语法冲突。
你可以在字符类内和字符类外使用方括号表示法使用这四个速记。它们对于验证 XML 模式中的 XML 引用和值非常有用。正则表达式 \i\c* 匹配 XML 名称,如 xml:schema。
The regex <\i\c*\s*> matches an opening XML tag without any attributes. </\i\c*\s*> matches any closing tag. <\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*\s*> matches an opening tag with any number of attributes. Putting it all together, <(\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*|/\i\c*)\s*> matches either an opening tag with attributes or a closing tag.
本教程中讨论的其他正则表达式风格不支持 XML 字符类。如果你的 XML 文件是纯 ASCII,你可以使用 [_:A-Za-z] 作为 \i,使用 [-._:A-Za-z0-9] 作为 \c。如果你想允许 XML 标准允许的所有 Unicode 字符,那么你最终会得到一些非常长的正则表达式。你可以使用以下内容代替 \i
[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]
你可以使用以下内容代替 \c
[-.0-9:A-Z_a-z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| 简介 | 目录 | 特殊字符 | 不可打印字符 | 正则引擎内部 | 字符类 | 字符类减法 | 字符类交集 | 速记字符类 | 点 | 锚点 | 单词边界 | 交替 | 可选项目 | 重复 | 分组和捕获 | 反向引用 | 反向引用,第 2 部分 | 命名组 | 相对反向引用 | 分支重置组 | 自由间距和注释 | Unicode | 模式修饰符 | 原子分组 | 占有量词 | 前瞻和后顾 | 前瞻和后顾,第 2 部分 | 将文本排除在匹配之外 | 条件 | 平衡组 | 递归 | 子例程 | 无限递归 | 递归和量词 | 递归和捕获 | 递归和反向引用 | 递归和回溯 | POSIX 方括号表达式 | 零长度匹配 | 继续匹配 |
页面 URL:https://regexper.cn/shorthand.html
页面最后更新时间:2021 年 8 月 20 日
网站最后更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。