[轉]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% 表示 關鍵字或字符串表達式。
"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM