正则表达式
正则表达式是一种功能非常强大的搜索工具。它让你能够搜索复杂的单词形式。正则表达式主要被专业人员使用,但对办公环境中查找某些文件也很有用(见下文的例子)。
Total Commander在以下功能中支持正则表达式:
- 命令 - 查找文件 (用于文件名和文件内容)
- 在 Lister 中
- 在 批量重命名工具 中
- 在 选择文件对话框 中
正则表达式包括普通字符,特殊字符和所谓的元字符。以下字符是元字符或元字符的起始部分:
. \ ( ) [ ] { } ^ $ + * ? (仅出现在字符集合中才是元字符:- )
普通字符:
test 匹配搜索文本中的"test"。备注:它匹配文件名或文本行的任意位置的"test"。
转义序列:
反斜杠 \ 引导一个转义序列。例子:
\t 制表符
\xnnASCII码值为十六进制数nn的字符,例如\x20代表空格。字符映射表程序charmap.exe(如果安装了)显示大多数特殊字符的ASCII值。你可以使用Windows的计算器(科学型)把十进制数字转换为十六进制。
\x{nnnn}
编码为十六进制数字nnnn的Unicode字符。注意Total Commande中的文件名已使用Unicode,因此需要使用这种语法表达基本英文字符以外的字符。
\[ 左方括号。因为方括号是元字符,搜索的目标字符串包含方括号本身时,必须写为 \[ 。
\\反斜杠
\. 句号 (单独的句号"." 匹配任意字符,见下文)。
字符集合
一对方括号中的字符列表构成字符集合,它精确匹配集合中的一个字符。破折号定义范围,例如[a-z]。前导的尖号^表示字符列表以外的字符。
例子:
[aeiou] 精确匹配列表中元音字母的一个。
[^aeiou] 匹配元音字母以外的字符。
M[ae][iy]er 查找Meier先生名字的各种可能的写法:Mayer,Meyer,Maier,Meier。在忘记了名字的准确拼写时很有用。
元字符
下表是最重要的元字符:
^ 行首
$ 行尾
. 任意字符
\w 字母,数字或下划线 _
\W \w的补集
\d 数字
\D 非数字
\s 单词分隔符(空格,制表符等空白字符)
\S 非空白字符
\b 单词边界
\B \b的补集
重复计数
重复计数表示左侧字符或表达式的重复次数。
* 零次或多次
+ 一次或多次
{n} 正好n次
{n,} 至少n次
{n,m} 至少n次,至多m次
重复计数的工作方式是贪婪模式,即,尽可能匹配更多的字符。后面跟问号变为非贪婪模式,即,有匹配就停止。
例子:在"abbbbc"中搜索"b+"得到"bbbb",而搜索"b+?"只得到"b"。
可选字符
可选字符放在圆括号中,以竖线 | 分隔。
例子:(John|James|Peter) 匹配三个名字John,James,Peter中的一个。
子表达式
圆括号中的表达式即子表达式。
例子:想交换mp3文件名中的曲名和演唱者,它们以短横线分隔(曲名 - 演唱者.mp3),可以这样处理:
搜索:(.*) - (.*)\.mp3
替换:$2 - $1.mp3
此处$1代表第1个括号中表达式匹配的内容,$2代表第2个表达式。
后向引用
\n 代表第n个子表达式已匹配的内容。
例子:(.+)\1+ 匹配abab(其中第1组ab由 .+ 匹配,第2组由\1+匹配)
修饰符
用于改变正则表达式的行为。
(?i) 忽略大小写。这是Total Commander查找文件的默认选项。
(?-i) 区分大小写。
(?g) 打开贪婪模式(默认是打开的)
(?-g) 关闭贪婪模式,此时"+" 与 "+?" 同义
其他修饰符与Total Commander无关,因为程序仅支持单行文字内搜索。
Total Commander使用Andrey V. Sorokin编写的免费的Delphi库TRegExpr: http://www.regexpstudio.com/
上述说明部分来自于这个库的帮助文件。