正則表達式通常用來表達一組具有共通特性(pattern)的字符串集合。
regexp(regular expression)的精髓,就是用最少的字符,表達最大的字符集。
regexp非emacs的專利,而是UNIX下的產物。
regexp下的特殊字符:
*** 第一類字符:代表選擇所有
. 代表除了newline以外的所有單個字符。甚至是一些特殊字符。
若想表達任意多的任意字符,用".*"表示,.不包含換行符的
*** 第二類字符:postfix character,用來表示重復出現的單字符.
* 表示重復符號前的字符從0到無限多次
例如:ab*->a,ab,abb,abbb,abbb...等
+ 表示重復符號前字符從1到無限多次
例如:ab+->ab,ab,abb,abbb,abbbb...等
? 表示重復符號前的字符0次或1次
例如:ab?->a,ab
*** 第三類:character set 用來表示某個特定的字集中的元素
[] 表示某個特定的字集
例如:[a@!dl3]->a,@,!,d,l,3任選其一
[a-g]->a,b,c,d,e,f,g任選其一
[]* 例如:c[ab]d->cad,cbd
c[ab]*d->cd,cad,cbd,caad,caabd,caabbd.....
[]+ 例如:c[ab]+d->cad,cbd,caabd,cabbd.....
[]? 例如:c[ab]?d->cd,cad,cbd
任何特殊字符,出現在[]內,都會被視為一般字符,除了兩個,^,-
^ 若出現在集合的第一個位置,表示"非"
例如:[a-zA-z]表示英文字母集合 [^a-zA-z]表示所有非英文字母集合
- 表示有序集合的范圍
例如:[a-g]表示[abcdefg],[0-9]表示[0123456789]
*** 第四類:指定字符出現在行首或者行尾
^ 若出現在字符前,表示這個字符在行首出現。
例如:^the 表示以The為行首的字符串
$ 若出現在字符后,表示這個字符在行尾出現
例如:out$ 表示以out為行尾的字符串
\< 單詞開頭
\> 單詞結尾
*** 第五類:\ 的用法
\ 有兩種含義:
使特殊關鍵字變成普通字符,例如\\代表"\"。
或使普通字符變成特殊字符,例如:
|,(,),d,',`,b,B,<,>,w,W,sc,Sc之前加上了\,變為特殊字符
下面僅討論幾個常用的
\| 表示"或" 例如:is\|it-> IS,Is,iS,is,It,it,iT,IT
\( \) 用來表達正則表達式的范圍(就是左右括號,用來規范表達式范圍)
例如:\(read\|get\)file->readfile,getfile
ba\(na\)*->ba,bana,banana,bananana.....
*** 正則表達式的替換文本用法
\& 表示搜索文本的整個字符串。
例如:replace .d \%d 代表在所有滿足"?d"格式的文本后面再附加一個d 例如ad替換為add
\num. 表示搜索文本的地num.個字符串組
例如:replace \(a[ad]\)-safe \1 將替換aa-safe為ad,ad-safe為aa
\# 表示替換次數,第一次替換為0,逐次增加
例如:replace a[ad] \&\# 將替換aa為aa0,ad為ad1
\? 手動輸入替換結果 ??????????