[转]FINDSTR正则表达式小结

前言:最近写了一个bat用于快速编译swf至目标目录,想利用FINDSTR命令通过匹配目标目录名称,匹配数量大概600多个,发现匹配耗时比较久,大概花费10余秒,因此还是放弃字符匹配,乖乖拼出全称来定位目录。感觉bat的运行效率是比较低的。

稍加搜索,看到一些帖子也印证了我的想法。bat不适合做太复杂的事。还是分享下FINDSTR命令的用法。

批处理运行效率讨论帖汇总

FINDSTR正则表达式小结

什么是正则表达式?
百度 http://baike.baidu.com/view/94238.htm?fr=ala0_1#4_5

findstr的正则表达式是用来定义字符串样式的
它的元字符有 .、*、[-]、\、\<、\>、^、$等。
参与运算的对象主要是字母、数字、符号、还有汉字。而且该运算具有特殊的规则。

findstr中正则表达式用法规则小结

● 行首行尾规则 
如"^rem"、"bat$" 表示从行首匹配rem、从行尾匹配bat。
○ 行首行尾可以是英文、数字,还可以是汉字。

● 字符集规则 
如 [}>]、[abc]、[123]、[a-zA-Z]、[0-9] 表示行中含有集里的任意字符即匹配。
注意,这是集合,不是串。如:"[news]"不能理解为查找含有news单词的行,只能是定位含有n e w s 4个字母之一的行。
○ 需要说明的是,该字符集里的集元素可以是字母和数字和一般的半角字符。
如可以是 : } { , . ] [等,但双引号"不被识别,不能是汉字(汉字不是ASCII码)。
○ "[.*]" 集合中出现的 .*,作为普通字符,没有特殊含意。
○ 可以组合使用,如 [aef1-3x-z]表示该字符集是aef和数字1-3和字母x-z等元素的并集.
○ "[ah][1-3]" 表示 2 个字符。

● 减法规则

[^abc] 参照帮助信息,本该理解为,匹配不含abc三个字母的行。但在xp系统下,却不被正确解释。
○ "[^echo.]" 实际表示在查找结果中去除为"echo."字符串的行。

● 通配符和重复符规则
即 .*
○ 通配符 . 代表任何一个字符,包括字母、数字、半角符号还有空格,但不包括空行。
○ 重复符 * 代表前面字母的重复(重复次数从0到多次)。如 .* [a-z]* [0-9]* [abc]* a*

● 单词前缀后缀定位规则 
"\<cal" 和="" "ed\="">"
该单词可以是英文单词和数字,该单词规则不适用于汉字。符号 \ 为转义符。
○ "\<cal"表示查找文本中,英文单词以cal为前缀的单词 如="" call="" called="" calling="" calculation<br="">○ "ed\>" 查找文本中,英文单词以ed为后缀的单词 如 called added changed
○ "\<call\>" 用来精确查找单词。这里用来精确查找单词call ,那么calling called 就不被匹配。
○ "\<3389\>" 表示精确查找3389 那么33898、233895就不被匹配。

● 关键字规则 "string"
该string可以是英文单词、汉字、数字、符号以及上面规则的组合.

能够正确解读汉字的只有行首行尾规则,和该规则。

● 转义符 \ 
把表达式中的特殊字符(元字符)转化为普通字符。但不能对双引号" 和大于号 > 转义。
常见写法
\.、\*、\\、\[、\]、\-、\\<   
如 "\.bat" 把通配符转化为普通的句点,这里表示匹配".bat"结尾的批处理文件名。也可以写成 "[.]bat"


示例1:

dir /a /b /s d:\ | findstr /i "\.bat$"
○ 查找行尾是".bat"字符串的行,并显示出来。
\是转义符号,使句点.不再是通配符,而是文件拓展名中的点。用于表达式 的 关键字查询,在这里是列举后缀是bat的批处理文件。

dir /a /b /s d:\ | findstr /i ".bat$"
○ 同效于 dir /a /b /s d:\ | findstr /i "bat$" 
// 不,有一字符之差

findstr /r /i /n Google d:\bat\wenben.txt | more
○ 使用 Strings 和 [Drive:][Path] FileName [...] 在命令字符串中,所有 findstr 命令行选项必须在 Strings 和 [Drive:][Path] FileName [...] 之前。

findstr /r /i /n /x /c:"Google news" d:\bat\htm\meinv.txt | more
○ /x 打印完全匹配的行.查找只有“Google news”单词的行。
如果是带空格的字符串 ,要用双引号引起来,而且要用参数/C:"string1 string2"

findstr . 2.txt 或 Findstr "." 2.txt
○ 从文件2.txt中查找任意字符,不包括空字符或空行。
空字符不是空格。.可以匹配空格
// F:>echo hi pz|findstr "...pz"
// hi pz
// F:>echo hi pz|findstr "....pz"
//

findstr /i /n [g-k] d:\bat\htm\meinv.txt | more
○ 表达式中[g-k],可以是字母a-z 或者数字0-9,不能是汉字。而且要顺序排列,由小到大。


示例2
下面的命令实现提取网页的特定行

Findstr /r /i /n %string% %htmfile%

%htmfile% 表示网页文件(文本文件)。
%string% 表示 关键字或字符串表达式。

"

时间: 2024-11-09 03:43:58

[转]FINDSTR正则表达式小结的相关文章

C#正则表达式小结

C#正则表达式小结    只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数字:"^\d{n,}$".只能输入m~n位的数字:."^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$".只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$".只能输入有1~3位小数的正实数:"^[0-

正则表达式 小结

正则表达式是一种文本模式,经常被用来匹配具有某种规则的文本. 正则表达式可以写得很复杂,内容也可以很高深,但是常用的规则很简单.本文主要小结一下最近用到的正则表达式语法,足以满足平常的小需求了. 首先先了解一下基本单元:特殊字符与元字符.  http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.100).aspx 这篇文章中有详细的参考清单. 特殊字符就是它本身不匹配某种单词,但是它有辅助含义,比如 ^表示当前模式一定要出现在文本的开头,$表

Python正则表达式小结(1)

学习一段python正则表达式了, 对match.search.findall.finditer等函数作一小结  下面以一段网页为例,用python正则表达式作一个范例: strHtml = '''<div> <a href="/user/student/" class="user-t"><img src="/uploads/avatar/2015/06/082e408c-14fc-11e5-a98d-00163e02100b

FINDSTR正则表达式的基本用法

9527整理 1.findstr . 2.txt 或 Findstr "." 2.txt 从文件2.txt中查找任意字符,不包括空字符或空行==================== 2.findstr .* 2.txt 或 findstr ".*" 2.txt从文件2.txt中查找任意字符包括空行和空字符==================== 3.findstr "[0-9]" 2.txt从文件2.txt中查找包括数字0-9的字符串或行====

js正则表达式小结

虽然一直在使用正则表达式,但是一直没有系统的归纳.以下从正则表达是的功能进行相应的介绍.如有不正确的地方,望请纠正. 模式检测功能 模式检测是指要检测的文本是否符合我们预期的模式,主要用于做登录.注册的验证等:如,我们经常在注册时要求账号长度为6-16位等,以下是常用正则表达式 手机号码:/[1-9][0-9]{10}/ 邮箱:/^([a-zA-Z0-9_-])[email protected]([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/ 身份证:

正则表达式小结(Regular Expressions)

(原创文章,谢绝转载~) 日常开发中,常用正则表达式方便的进行匹配.筛选工作.正则的常用内容有: 一般情况下原则:从左至右,越多越好(贪婪) 字符:转义:\ ,如 \*,\d (数字)等 选择,case1|case2|case3, 注意:对于大部分正则引擎,匹配规则是从左至右优先,因而,string|stringlong  会匹配到 stringlong 的 string 部分: 少数  Text-Directed Engine  的匹配规则则是最长优先,此时 string|stringlong

正则表达式小结

常用元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 常用限定符 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 常用反义词 代码/语法 说明 \W 匹配任意不是字母,数字,下划线,汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数

linux正则表达式与文件格式化处理指令

1.特殊符号: 1)[:alnum:]:字母和数字 2)[:alpha:]:字母 3)[:blank:]:空格和tab键 4)[:cntrl:]:控制键CR,LF,Tab,Del等 5)[:digit:]:数字 6)[:graph:]:除了空格符(空格和tab)外的其他按键 7)[:lower:]:小写字母 8)[:print:]:可打印字符 9)[:punct:]:标点符号 10)[:upper:]:大写字母 11)[:space:]:空白字符,如空格,tab,ctr等 12)[:xdigit

使用正则表达式的格式化与高亮显示json字符串

使用正则表达式的格式化与高亮显示json字符串 json字符串很有用,有时候一些后台接口返回的信息是字符串格式的,可读性很差,这个时候要是有个可以格式化并高亮显示json串的方法那就好多了,下面看看一个正则表达式完成的json字符串的格式化与高亮显示 首先是对输入进行转换,如果是对象则转化为规范的json字符串,不是对象时,先将字符串转化为对象(防止不规范的字符串),然后再次转化为json串.其中json为输入. if (typeof json !== 'string') { json = JS