很久以前很喜欢Total Commander,但是较老的版本不支持树,所以就放弃了。改用xplorer2这个文件资源管理器。但是,不知道xplorer2最近抽什么风,老师无缘无故的崩溃,所以又开始使用Total Commander了。不过,重新用起来这个,发现比老的版本好太多了。所以,现在决定,重新开始使用Total Commander了。

我用编辑器或者资源管理器,很看重的一个功能是:是否支持正则表达式。因为这玩意的确能极大的提高搜索、替换的效率。这次Total Commander没人令人失望。

Total Commander的正则表达式功能基于TRegExpr( http://regexpstudio.com/ ),实现了一个正则表达式的子集。下文中的术语来自于TRegExpr的说明文档。语法与一般支持RegEx的编辑器类似,某些符号,如/n,在TC中不 支持。下文中出现的符号和例子都经过验证,是可用的。

Total Commander在以下功能中支持正则表达式:

  • Commands(命令)菜单的Search(查找文件) 【文件名和文件内容都支持RegEx】
  • Lister(查看)
  • Files(文件)菜单的Multi-Rename tool(批量重命名)
  • Mark(选择)菜单的select group(增加选择)

正则表达式包括普通字符,特殊字符和元字符。元字符是一些有特殊含义的标识,例如:. / ( ) [ ] { } ^ $ + * ?,正是这些扩展含义的特殊字符组合成了灵活而功能强大的正则表达式。

普通字符

正常的字符串。转义序列(Escape sequences):以反斜杠引导转义序列。例如:

  • /xnn  ASCII码值为十六进制数nn的字符,例如/x20代表空格。
  • /t   TAB制表符,等同于/x09
  • /[/] 左/右方括号。因为方括号是元字符,所以表示这两个符号本身时,用这种转义序列。
  • //   反斜杠
  • /.   句号(因为它也是元字符)。匹配其它元字符本身时,都可以用转义序列。

例子:查找字符串soft/[microsoft]时,表达式为:soft///[microsoft/]

字符集合(Character classes)

一对方括号中的字符列表,值为列表中任意一个字符。破折号表示范围,例如h-k表示h,i,j,k,即ASCII码表中介于h和k之间的字符。前导 的^表示后面列表之外的字符。转义字符、破折号、元字符和方括号也可以出现在字符集合中。破折号做为普通字符出现在集合中时,应放在列表的头 /尾或以转义序列/-表示。方括号做为普通字符出现在集合中时,应放在列表的头部或以转义序列表示。

例子:

  • [aeIoU]   aeIoU中任意一个字母。
  • [a-z^rt]   a至z的小写字母,但不含r和t。
  • M[ae][iy]er 可以匹配:Mayer,Meyer,Maier,Meier。
  • [0-9a-zA-Z] 匹配所有数字、大小写字母。
  • []/d-]    匹配右方括号,数字,破折号。它等同于[/]0-9/-]

元字符(Metacharacters)

包括几种特殊的符号:

  • ^  行首,例如,^step仅匹配"step by step"中的第1个单词。TC中与/A作用相同。
  • $  行尾,例如,step$仅匹配"step by step"中的最后一个单词。
  • .  任意字符
  • /w 字母,数字或下划线_,等同于[a-zA-Z0-9_]
  • /W /w的补集
  • /d 数字
  • /D 非数字
  • /s 空白字符,等同于[ /t/n/r/f])
  • /S 非空白字符
  • /b 单词边界,指介于两个紧邻的/w和/W之间的位置。应与其它字符合用,例如/brun/b会匹配"how to run cmd: running"中to后面的run,但不会匹配running中的run。
  • /B /b的补集

重复计数(iterators)

表示左侧字符或表达式的重复次数。

  • *   零次或多次
  • +   一次或多次
  • {n}  n次
  • {n,}  至少n次
  • {n,m} 至少n次,至多m次

重复计数的工作方式是"greedy"模式, 即,尽可能匹配更多的字符。后面跟问号变为"non-greedy"模式,即,有匹配就停止。 例如:在"abbbbc"中搜索"b+"的结果是"bbbb",而搜索"b+?"只得到"b"。

可选字符(alternatives)

由竖线|分隔的一组字符。为了避免歧意,最好用圆括号扩起来。例如:(John|James|Peter)匹配John、James或Peter中的任意一个名字。

匹配时由左向右计算,类似于C语言中的逻辑或运算,左边表达式满足后不再计算右边表达式。例如,在"barefoot"中搜索(foo|foot)时,得到foo,不会得到foot。

竖线|在字符集合中只是普通字符,所以[look|like]的含义是lokie5个字母和竖线中的任意一个字符,而不是look或like中的某个单词。

子表达式(subexpressions)

圆括号中的表达式即子表达式。一个完整的正则表达式可能含有多个子表达式,它们从左向右从1开始编号。可以用$1,$2...引用各个子表达式的值。

例如: 把形如"歌手名 - 曲名.mp3"的文件改名为"曲名(歌手名).mp3"
搜索:(.*) - (.*)/.mp3
替换为:$2($1).mp3
其中$1代表第1对括号中的表达式匹配的文字,$2代表第2对括号中的表达式匹配的文字。

后向引用(backreferences)

/1至/9。/n解析为第n个子表达式已匹配的内容。

例如:go12gogogoza34 中搜索(g.+)(/d+)/1+ 会搜索到go12gogogo,第1个表达式匹配go,第2个表达式匹配12,后面的3组go是由/1+匹配的。

修饰符(Modifiers)

用于改变正则表达式的行为。使用时放在表达式前面。它作用于右侧的表达式,直到遇到另一个修饰符或表达式结束。可以在表达式中插入多个修饰符。

  • (?i)   忽略大小写。这是Total Commander搜索文件时的默认选项。
  • (?-i)   大小写敏感。
  • (?g)   打开"greedy"模式 (缺省是打开的)
  • (?-g)  关闭"greedy"模式

例如:如果希望在文件copy1.txt,copy2.txt中仅搜索小写copy开头的文件时,使用:(?-i)copy.*/.txt。如果不使用正 则表达式,由于搜索文件时默认是不区分大小写的,搜索copy*.txt时也会得到copy1.txt。搜索文字时,表达式 (?i)Saint-(?-i)Petersburg得到的结果中,Saint可以有不同的大小写组合,但末尾的单词必定是Petersburg。

Total Commander仅支持正则表达式的子集,例如它仅支持单行文字内的搜索,不支持多行。

注:主体内容非原创,资料多数来源网络,源文地址不可考!

TotalCommander(TotalCMD)的正则表达式的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  4. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  5. ios – 如何识别显示为空括号的空NSData对象?

    我正在处理GameKit的GKTurnBasedMatch类中的损坏问题(参见thisthread),这有时会导致游戏状态无效,matchData损坏.因此,作为一种解决方法,我正在创建一种方法来识别这些无效匹配,以便我可以适当地处理它们.损坏的matchData似乎是一种很好的方法.但是,到目前为止,我一直无法识别它们.当我这样做:我得到以下内容:所以匹配数据显示为一对空括号“”,我希望可以

  6. ios – NSURLErrorDomain代码-1002下载pdf

    我正在尝试缓存一个网页,然后我可以使用UIWebView显示该网页.我在另一个NSURLSessionDataTask的完成块内的for循环(尝试缓存6个网页)中有相关的NSURLSessionDataTask.当我跑步时,我不断收到此错误:Ayy下载错误,数据:响应:(空)错误:错误域=NSURLErrorDomain代码=-1002“操作无法完成.(NSURLErrorDomain错误-1

  7. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  8. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  9. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  10. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部