首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >FINDSTR正则表达式小结

FINDSTR正则表达式小结

作者头像
用户3519280
发布2023-07-06 16:45:02
发布2023-07-06 16:45:02
1.2K0
举报
文章被收录于专栏:c++ 学习分享c++ 学习分享

前言:最近写了一个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

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% 表示 关键字或字符串表达式。

"

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 批处理运行效率讨论帖汇总
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档