# 正则表达式语法

正则表达式是一种更强大（因此也更复杂）的通配符模式匹配形式。 与 [标准模式匹配](https://chaoses-ib.gitbook.io/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh/pattern_matching_syntax.zh) 一样，它们可以在整个 Opus 中使用。 通常，您必须在特定情况下专门启用正则表达式的使用 - 默认情况下，Opus 将假定为标准模式匹配。 例如，[**高级重命名**](https://chaoses-ib.gitbook.io/directory-opus/guan-fang-shou-ce/readme.zh-2/readme.zh-1/readme.zh) 对话框有一个正则表达式模式，您必须先选择它才能使用正则表达式。

正则表达式优于标准模式匹配的一个优势是，它们可以在某些函数中启用一种搜索和替换形式。 例如，这在 **Rename** 命令中使用。 “搜索”字符串被指定为与文件原始名称匹配的模式。 该模式可以指示 *捕获组* - 源字符串中被捕获的表达式，并且可以被带到新字符串（作为“替换”字符串）中。 例如，假设 **Rename** 对话框设置为正则表达式模式，并提供以下模式：

**旧名称**: `The (.*) Backup\\(.*)`\
**新名称**: `\1.\2`

*旧名称* 字符串中的两个 **(.\*)** 标记是捕获组 - 它们“捕获”与括号内的表达式匹配的任何内容。 在这种情况下，括号内的表达式是 **.\***，它只是表示“匹配任何内容”。 因此，此模式将匹配任何以 *The* 开头并以 *Backup* 结尾的文件名，并将捕获文件名的中间部分以供以后使用。 第二个 **(.\*)** 将捕获文件扩展名。 然后，*新名称* 字符串可以重复使用捕获的文本，这用 **\1** 和 **\2** 标记表示。 因此，例如，原始文件名 *The Lord Of The Rings Backup.avi* 将被重命名为 *Lord Of The Rings.avi*。 **\1** 指的是第一个捕获组，**\2** 指的是第二个，依此类推。

如果您需要 *新名称* 字符串包含文字 \，请连续使用两个 \。 例如，`abc\\xyz` 将变为 `abc\xyz`。

仅当与 **Rename** 命令一起使用时，*旧名称* 模式后可以跟一个 **#** 字符，以指示应重复多次搜索和替换操作。 例如，以下正则表达式重命名将删除文件名中的所有空格：

**旧名称**: `(.*)\s(.*)#`\
**新名称**: `\1\2`

**#** 会导致搜索和替换重复进行，直到新名称不再更改。 您还可以通过附加一个数字来指定最大重复次数，例如，末尾的 **#5** 将重复该操作不超过五次。

正则表达式有很多不同的变体； 默认情况下，Opus 使用的是所谓的 *TR1 ECMAScript*。 Microsoft 有一个 [关于 TR1 的页面](http://www.gpsoft.com.au/DScripts/redirect.asp?page=regex)，该页面比本帮助文件更详细。

| 标记       | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |                                                                          |                                                                                            |                                                   |
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------- |
| **^**    | <p><strong>字符串的开头</strong>.<br>插入符号用于将搜索“锚定”到字符串的开头。 如果搜索没有锚定到任何一端，则该模式可以匹配目标的子字符串。</p><p>例如：<br><strong>^abc</strong> 匹配 <em>abc</em>、<em>abcdefg</em>、<em>abc123</em>，但不匹配 <em>123abc</em><br><strong>abc</strong> 也匹配 <em>123abc</em></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |                                                                          |                                                                                            |                                                   |
| **$**    | <p><strong>字符串的结尾</strong>.<br>美元符号用于将搜索“锚定”到字符串的结尾。 如果搜索没有锚定到任何一端，则该模式可以匹配目标的子字符串。</p><p>例如：<br><strong>abc$</strong> 匹配 <em>abc</em>、<em>endsinabc</em>、<em>123abc</em>，但不匹配 <em>abc123</em><br><strong>^abc(.\*)123$</strong> 匹配 <em>abc123</em>、<em>abcxyz123</em>，但不匹配 <em>abcxyz123def</em></p>                                                                                                                                                                                                                                                                                                                                                                                                                                           |                                                                          |                                                                                            |                                                   |
| **.**    | <p><strong>任何单个字符</strong>.<br>句点（句号）用于匹配任何单个字符。</p><p>例如：<br><strong>a.c</strong> 匹配 <em>abc</em>、<em>aac</em>、<em>acc</em>、<em>adc</em>，但不匹配 <em>acd</em></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                          |                                                                                            |                                                   |
| \*       | <p><strong>0 个或多个前面的表达式</strong>.<br>匹配零个或多个出现的前面表达式。 与 <strong>.</strong> 组合形成“匹配任何内容”标记 (\*\*.*)。</p><p>例如：<br><strong>ab*c</strong> 匹配 <em>ac</em>、<em>abc</em>、<em>abbc</em>、<em>abbbc</em>，...<br><strong>a.*c</strong> 匹配 <em>ac</em>、<em>abc</em>、<em>a123456c</em>、<em>aanythingc</em>，...<br><strong>.*</strong> 匹配任何内容</p>                                                                                                                                                                                                                                                                                                                                                                                                            |                                                                          |                                                                                            |                                                   |
| **+**    | <p><strong>1 个或多个前面的表达式</strong>.<br>匹配一个或多个出现的前面表达式。</p><p>例如：<br><strong>ab+c</strong> 匹配 <em>abc</em>、<em>abbc</em>、<em>abbbc</em>，但不匹配 <em>ac</em></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |                                                                          |                                                                                            |                                                   |
| **?**    | <p><strong>0 个或 1 个前面的表达式</strong>.<br>匹配零个或一个出现的前面表达式。</p><p>例如：<br><strong>ab?c</strong> 匹配 <em>ac</em>、<em>abc</em>，但不匹配 <em>abbc</em> 或 <em>abbbc</em></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |                                                                          |                                                                                            |                                                   |
| **\|**   | <p><strong>交替（逻辑 </strong><em><strong>或</strong></em><strong>）</strong>.<br>竖线用于分隔两个或多个字符或表达式，其中任何一个都可以匹配。</p><p>例如：<br><strong>a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | b</strong> 匹配 <em>a</em> 或 <em>b</em><br><strong>a(b                     | c)d</strong> 匹配 <em>abd</em> 或 <em>acd</em><br><strong>(bill                               | ted)</strong> 匹配 <em>bill</em> 或 <em>ted</em></p> |
| **{}**   | <p><strong>量词</strong>.<br>大括号用于表示前面的表达式必须匹配确切的次数。</p><p>例如：<br><strong>ab{2}c</strong> 匹配 <em>abbc</em>，但不匹配 <em>abc</em> 或 <em>abbbc</em><br><strong>a.{4}z</strong> 匹配 <em>abcdez</em>、<em>a1234z</em>、<em>afourz</em>、<em>aaaaaz</em> 等。</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |                                                                          |                                                                                            |                                                   |
| **\[]**  | <p><strong>字符集</strong>.<br>匹配指定字符集中任何单个字符。<br>您可以将字符集指定为单个字符（例如 <strong>\[abdfg]</strong>）或字符范围（例如 <strong>\[a-j]</strong>）或多个范围。</p><p>例如：<br><strong>\[abc]</strong> 匹配 <em>a</em>、<em>b</em> 或 <em>c</em><br><strong>\[af-j]</strong> 匹配 <em>a</em>、<em>f</em>、<em>g</em>、<em>h</em> 或 <em>j</em><br><strong>\[a-dh-kq-]</strong> 匹配 <em>a</em>、<em>b</em>、<em>c</em>、<em>d</em>、<em>h</em>、<em>i</em>、<em>j</em>、<em>k</em> 或从 <em>q</em> 开始的任何字符<br><strong>IMGP\[0-9]{4}.jpg</strong> 匹配 <em>IMGP0158.jpg</em>（或任何其它四位数）。</p>                                                                                                                                                                                                            |                                                                          |                                                                                            |                                                   |
| **\[^]** | <p><strong>否定字符集</strong>.<br>匹配<strong>不在</strong>指定字符集中的任何字符。 有关如何定义集合的信息，请参见 <strong>\[]</strong>。</p><p>例如：<br><strong>\[^pqr]</strong> 匹配除 <em>p</em>、<em>q</em> 或 <em>r</em> 之外的任何字符</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |                                                                          |                                                                                            |                                                   |
| **()**   | <p><strong>表达式 / 捕获组</strong>.<br>括号用于将多个字符组合成一个表达式。 当在“搜索和替换”中使用时（如高级重命名），它们还标记捕获组 - 有关这些内容的讨论，请参见上文。</p><p>例如：<br><strong>a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | bc</strong> 匹配 <em>ac</em> 或 <em>bc</em>，而<br><strong>a                  | (bc)</strong> 匹配 <em>a</em> 或 <em>bc</em></p>                                              |                                                   |
| **\\**   | <p><strong>转义字符</strong>.<br>反斜杠用于转义标记字符，以便按字面匹配这些字符。<br>当在非标记字符之前使用时，它用于指示以下特殊转义字符：</p><table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td></td><td>制表符 ($09)</td></tr><tr><td></td><td>回车符 ($0d)</td></tr><tr><td><strong>\v</strong></td><td>垂直制表符 ($0b)</td></tr><tr><td><strong>\f</strong></td><td>换页符 ($0c)</td></tr><tr><td></td><td>换行符 ($0a)</td></tr><tr><td><strong>\e</strong></td><td>转义符 ($1b)</td></tr><tr><td><strong>\x</strong></td><td>匹配指定为两位十六进制数的 ASCII 字符，例如 <strong>\x20</strong> 匹配空格</td></tr><tr><td><strong>\u</strong></td><td>匹配指定为四位十六进制数的 Unicode 字符，例如 <strong>\u0020</strong> 匹配空格。</td></tr></tbody></table><p>它还用于标记几个字符类，它们是用简写方式指定各种常见 <strong>\[]</strong> 字符集（见下文）。</p><p>例如：<br><strong>a | b</strong> 匹配 <em>a</em> 或 <em>b</em>，而<br><strong>a\b</strong> 匹配 <em>a | b\</em> <strong>a</strong> 匹配 <em>a</em> 后跟一个制表符，而<br><strong>a</strong> 匹配 <em>a</em></p> |                                                   |
|          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                          |                                                                                            |                                                   |
|          | 制表符 ($09)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                          |                                                                                            |                                                   |
|          | 回车符 ($0d)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                          |                                                                                            |                                                   |
| **\v**   | 垂直制表符 ($0b)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |                                                                          |                                                                                            |                                                   |
| **\f**   | 换页符 ($0c)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                          |                                                                                            |                                                   |
|          | 换行符 ($0a)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                          |                                                                                            |                                                   |
| **\e**   | 转义符 ($1b)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                          |                                                                                            |                                                   |
| **\x**   | 匹配指定为两位十六进制数的 ASCII 字符，例如 **\x20** 匹配空格                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |                                                                          |                                                                                            |                                                   |
| **\u**   | 匹配指定为四位十六进制数的 Unicode 字符，例如 **\u0020** 匹配空格。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |                                                                          |                                                                                            |                                                   |
| **\w**   | <p><strong>单词字符</strong>.<br>匹配任何单词字符。 等效于 <strong>\[a-zA-Z\_0-9]</strong>。</p><p>例如：<br><strong>^\w+\[0-9]{4}.jpg</strong> 匹配 <em>IMGP0158.jpg</em>（或任何其它前面至少有一个其它单词字符的四位数）。</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |                                                                          |                                                                                            |                                                   |
| **\W**   | <p><strong>非单词字符</strong>.<br>匹配任何非单词字符，等效于 <strong>\[^a-zA-Z\_0-9]</strong>。</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |                                                                          |                                                                                            |                                                   |
| **\s**   | <p><strong>空格字符</strong>.<br>匹配任何空白字符。 等效于 <strong>\[ \f\n\r\t\v]</strong>。</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                          |                                                                                            |                                                   |
| **\S**   | <p><strong>非空格字符</strong>.<br>匹配任何非空白字符。 等效于 <strong>\[^ \f\n\r\t\v]</strong>。</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |                                                                          |                                                                                            |                                                   |
| **\d**   | <p><strong>数字字符</strong>.<br>匹配任何十进制数字。 等效于 <strong>\[0-9]</strong>。</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |                                                                          |                                                                                            |                                                   |
| **\D**   | <p><strong>非数字字符</strong>.<br>匹配任何非十进制数字。 等效于 <strong>\[^0-9]</strong>。</p><p>例如：<br><strong>^\D+d{4}.jpg</strong> 匹配 <em>IMGP0158.jpg</em>（或任何其它前面至少有一个非数字字符的四位数）。</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |                                                                          |                                                                                            |                                                   |
