NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
# 正则表达式语法 正则表达式是一种更强大(因此更复杂)的通配符模式匹配形式。与[标准模式匹配](pattern_matching_syntax.zh.md)类似,在 Opus 中可以广泛使用它们。通常情况下,你必须在特定情况下特别启用正则表达式的使用 - 默认情况下,Opus 将假定标准模式匹配。例如,**[高级重命名](/Manual/file_operations/renaming_files/advanced_rename/README.zh.md)** 对话框具有正则表达式模式,在使用正则表达式之前你必须选择该模式。 正则表达式比标准模式匹配的一个优点是它们可以在某些函数中启用一种形式的搜索和替换。例如,这在 **重命名** 命令中使用。将“搜索”字符串指定为与文件的原始名称匹配的模式。该模式可以表示*捕获组*——源字符串中被捕获并可以传递到新字符串(作为“替换”字符串)中的表达式。例如,假设 **重命名** 对话框设置为正则表达式模式,并提供了以下模式: **旧名称**: 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*。 仅用于 **重命名** 命令时,可以在 *旧名称* 模式后跟一个 **\#** 字符,以指示应重复执行搜索和替换操作。例如,以下正则表达式重命名将从文件名中删除所有空格: **旧名称**: (.\*)\s(.\*)# **新名称**: \1\2 **\#** 会导致重复执行搜索和替换,直到新名称不再发生更改。你还可以通过附加一个数字来指定最大重复次数,例如末尾的 **\#5** 将最多重复该操作五次。 正则表达式有许多不同的变体;默认情况下,Opus 使用所谓的 *TR1 ECMAScript*。Microsoft 有一个[TR1 页面](http://www.gpsoft.com.au/DScripts/redirect.asp?page=regex),它比该帮助文件更详尽。 <table> <thead><tr><th> 标记</th><th> 说明 </th></tr></thead><tbody><tr><td> **^**</td><td> **字符串的开头**。 插入符号用于将搜索“锚定”到字符串的开头。如果搜索没有锚定到两端,那么模式可以匹配目标的子字符串。 例如: **^abc** 匹配 *abc*, *abcdefg*, *abc123*, 但不匹配 *123abc\\* **abc** 还匹配// 123abc// </td></tr><tr><td> **\$**</td><td> **字符串的结尾**。 美元符号用于将搜索“锚定”到字符串的结尾。如果搜索没有锚定到两端,那么模式可以匹配目标的子字符串。 例如: **abc\$** 匹配 *abc*, *endsinabc*, *123abc*, 但不匹配 *abc123* **^abc(.\*)123\$** 匹配 *abc123*, *abcxyz123*, 但不匹配 *abcxyz123def* </td></tr><tr><td> **.**</td><td> **任何单个字符**。 句点(句号)用于匹配任何单个字符。 例如: **a.c** 匹配 *abc*, *aac*, *acc*, *adc* 但不匹配 *acd* </td></tr><tr><td> \*</td><td> **零个或多个前一个表达式**。 匹配前一表达式的出现次数为零或多次。与 **.** 结合形成“匹配任何内容”令牌 (**.**\*)。 例如: **ab\*c** 匹配 *ac*, *abc*, *abbc*, *abbbc*, ... **a.\*c** 匹配 *ac*, *abc*, *a123456c*, *aanythingc*, ... **.**\* 匹配任何内容 </td></tr><tr><td> **+**</td><td> **前一个表达式出现一次或多次**。 匹配前一表达式的出现次数为一次或多次。 例如: **ab+c** 匹配 *abc*, *abbc*, *abbbc* 但不匹配 *ac* </td></tr><tr><td> **?**</td><td> **前一个表达式出现零次或一次**。 匹配前一表达式出现零次或一次。 例如: **ab?c** 匹配 *ac*, *abc* 但不匹配 *abbc* 或 *abbbc* </td></tr><tr><td> **\|**</td><td> **交替(逻辑 *或*)**。 竖杠用于分隔两个或多个字符或表达式,其中的任何一个都可能匹配。 例如: **a\|b** 匹配 *a* 或 *b* **a(b\|c)d** 匹配 *abd* 或 *acd* **(bill\|ted)** 匹配 *bill* 或 *ted* </td></tr><tr><td> **{}**</td><td> **量词**。 大括号用于指明前面的表达式必须完全匹配一定次数。 例如: **ab{2}c** 匹配 *abbc*, 但不匹配 *abc* 或 *abbbc* **a.{4}z** 匹配 *abcdez*, *a1234z*, *afourz*, *aaaaaz*, 等。 </td></tr><tr><td> **\[\]**</td><td> **字符集**。 匹配指定字符集中任何单个字符。 你可以将字符集指定为单个字符(例如,**\[abdfg\]**)或字符范围(例如,**\[a-j\]**)或多个范围。 例如: **\[abc\]** 匹配 *a*, *b* 或 *c* **\[af-j\]** 匹配 *a*, *f*, *g*, *h* 或 *j* **\[a-dh-kq-\]** 匹配 *a*, *b*, *c*, *d*, *h*, *i*, *j*, *k* 或从 *q* 开始的任何字符 **IMGP\[0-9\]{4}.jpg** 匹配 *IMGP0158.jpg*(或其它任何四位数)。 </td></tr><tr><td> **\[^\]**</td><td> **否定字符集**。 匹配指定字符集**中没有**的任何字符。有关如何定义这些集合的信息,请参见 **\[\]**。 例如: **\[^pqr\]** 匹配除了 *p*, *q* 或 *r* 之外的任何字符 </td></tr><tr><td> **()**</td><td> **表达式/捕获组**。 括号用于将多个字符组合成一个表达式。当在高级重命名之类的“搜索和替换”中使用时,它们也标记捕获组 - 参阅上面关于这些组的讨论。 例如: **a\|bc** 匹配 *ac* 或 *bc*,而 **a\|(bc)** 匹配 *a* 或 *bc* </td></tr><tr><td> **\\**</td><td> **转义字符**。 反斜杠用于转义令牌字符,以匹配那些字符本身。 当用于非令牌字符之前时,它用于指示以下特殊转义字符: \<WRAP\> | | | |--------|------------------------------------------------------------------------------------------------------------| | **\t** | tab 字符 (\$09) | | **\r** | carriage return (\$0d) | | **\v** | 垂直制表符(\$0b) | | **\f** | 换页符(\$0c) | | **\n** | 换行符(\$0a) | | **\e** | 转义符(\$1b) | | **\x** | 匹配指定为两位十六进制数字的 ASCII 字符,例如 **\x20** 匹配空格 | | **\u** | 匹配指定为四位十六进制数字的 Unicode 字符,例如 **\u0020** 匹配空格 | \</WRAP\>\<wrap clear/\> 它还用于标记几个字符类,这些字符类是指定各种 **\[\]** 字符集(见下文)的简写方式。 例如: **a\|b** 匹配 *a* 或 *b*,而 **a\\b** 匹配 *a\|b\\* **a\t** 匹配后面跟制表符的 *a*,而 **a\\t** 匹配 *a\t* </td></tr><tr><td> **  \w**</td><td> **单词字符**。 匹配任何单词字符。等效于 **\[a-zA-Z_0-9\]**。 例如: **^\w+\[0-9\]{4}.jpg** 匹配 *IMGP0158.jpg*(或任何其它至少前置一个单词字符的四位数字)。 </td></tr><tr><td> **  \W**</td><td> **非单词字符**。 匹配任何非单词字符,等效于 **\[^a-zA-Z_0-9\]**。 </td></tr><tr><td> **  \s**</td><td> **空格字符**。 匹配任何空白字符。等效于 **\[ \f\n\r\t\v\]**。 </td></tr><tr><td> **  \S**</td><td> **非空格字符**。 匹配任何非空白字符。等效于 **\[^ \f\n\r\t\v\]**。 </td></tr><tr><td> **  \d**</td><td> **数字字符**。 匹配任何十进制数字。等效于 **\[0-9\]**。 </td></tr><tr><td> **  \D**</td><td> **非数字字符**。 匹配任何非十进制数字。等效于 **\[^0-9\]**。 例如: **^\D+\d{4}.jpg** 匹配 *IMGP0158.jpg*(或任何其它至少前置一个非数字字符的四位数字)。 </td></tr></tbody> </table>