Thursday, March 29, 2007

Wildcards != Regular Expression

Wildcards != Regular Expression, U Know!

When I use the TotalCommand with the Regexp option, I want search some file using the policy in the windows file search. This inspire me that do not take things for granted. In the windows, the '*' can match zero to infinite char, however, in the TT, you must use the customized Regexp. So make it clear before use the specific version of Regexp.

Original: use typedef * HyPortLib* (not work)
Correctly:use typedef (.*) HyPort(.*) (it works ;-))

[From the material]
. \ ( ) [ ] { } ^ $ + * ?

转义序列:

反斜杠 \ 引导一个转义序列。
\t 制表符
\xnn ASCII码值为十六进制数nn的字符,例如\x20代表空格。字符映射表程序charmap.exe(如果安装了)显示大多数特殊字符的ASCII值。你可以使用Windows的计算器(科学型)把十进制数字转换为十六进制。
\[ 左方括号。因为方括号是元字符,搜索的目标字符串包含方括号本身时,必须写为 \[ 。
\\ 反斜杠
\. 句号 (单独的句号"." 匹配任意字符,见下文)。

字符集合

一对方括号中的字符列表构成字符集合,它精确匹配集合中的一个字符。破折号定义范围,例如[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) 关闭“贪婪”模式,此时"+" 与 "+?" 同义

No comments: