findstr正则

来源:互联网 发布:按键精灵调用js 编辑:程序博客网 时间:2024/05/01 23:35
 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
○ "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% 表示 关键字或字符串表达式。
"<title>" 提取<title>所在行的信息,即标题信息。
"<b>" 提取在<b></b>内加粗的文本
"<h[1-6]" 提取所有的正文标题信息包括h1-h6
[59]   查找含有数字5或9的行
1[58] 查询含有15或18的行
[@,.] 查找含有符号"@"或逗号","或句点"."的行,定位有该符号任意之一的行。但双引号"不被正确解释。// ?
"^<div"   查询定位行首字符是<div的行.
"}$"   定位行尾是右花括号的行
"[}>]$"   定位行尾是右花括号或者大于号的行. 使用行首或行尾进行综合定位时必须加双引号才能被正确解释。
"[^echo.]" 减法规则,在查找结果中去除含有"echo."字符串的行,而且有严格规定,该行仅仅只有字符串"echo."不能再含有其它字   符,甚至不能有空格。否则视为无效。但是可以使用多个减法规则,用来去除多行。
"[^echo.][^add][^call]" 减法规则,查找去除含有echo. 或者add 或者call单词的行。
"[.*]" 如果在字符集内插入通配符和重复符号将视为普通字符,没有通配和重复的含义。
"[abcl][^echo.]" 减法规则也可以与字符集规则联合使用。
"[abcl][^echo.][^add][^call]"
@echo off
title 循环测试正则表达式用法
: begin
cls
set /p string=输入关键字或字符串表达式
set htmfile=d:\bat\htm\meinv.htm
echo.
Findstr /r /i /n %string% %htmfile%|more
echo.
pause&&goto begin
rem Q键退出more
rem 参数/R 强调以正则表达式规则来解读字符串。
0 0
原创粉丝点击