閑聊正則表達式(一)


 
  這篇是跟大家沒事聊聊正則表達式而已,可不要拿這個當學習教材啊!—— 如果看着舒服,那么給Me推薦一下。
 
正則是什么玩意?
 
  其實這個東西就是一個文本處理工具。記住只是一個“工具”而已,不要想的太復雜。
 
  對於這玩意,能用就用,不能用,咱們就不用他,換個稱手的家伙。跟殺人一個道理,如果覺得槍不好用,那你就用鋤頭,或者刀子。
 
 
正則從哪入手?
 
  如果你想了解一個人身體結構,很簡單:拿刀子把身體解剖開,就知道里面都有什么了?無怪乎肉、骨頭,還有水。
 
  現在我們把正則剖開來看,發現也就是“元字符”和“普通文本字符”組成了正則。怎么玩好正則?就看你怎么拼裝這些字符了。
注意了,既然正則是由字符構成,那我們就要養成用 字符理解正則的習慣。
 
舉個例子:
  你是怎么理解^chuanshanjia的?
  我想你肯是這樣理解的:匹配以chuanshanjia開頭的行。——這么組織語言,讓腦袋轉了幾下,費腦子。
  而字符理解是:先匹配一個行開頭^, 緊接着是c、h、u、a、n、s、h、a、n、j、i、a字符的行。——腦子不用轉,挨着往下看就行了。
 
 
 
行的起始和結束
 
  上面我舉了個^chuanshanjia的例子,里面的^這個就表示行的起始。
 
  現在具體來說說:
 
   ^(脫字符號),代表一行的行首。記住這個符號代表的是行文本中的一個位置。——只是位置而已。
 
  用“脫”這個字?搞不明白,難道在一個字符的前面放這么一個符號,就表示后面的字符要脫什么東西了?——你可以這么理解,做那事的時候,首先得把衣服脫了,要不然,你們怎么開始?^_^
 
 
   $(美元符號),代表一行的行尾。理解了^,這個自然好理解了。也僅僅表示文本行的位置。——干完事記着付錢啊,而且要給美元($)!^_^
 
注意了:脫字符和美元符,它們匹配的是一個 位置,而不是什么具體的文本字符。
 
字符組
 
 
  現在幻想一下:如果你是選美比賽的評委,現在有美女,編號是:A、B、C、D、E、F......。你看上了其中幾個美女,想潛規則她們,那么你就會拿出一張小紙條,上面寫上A、E、C。然后讓手底下的人,去把這幾個美女帶上來。然后后面的事你就想吧......
 字符組就相當於你拿出的那張小紙條。它的功能就是把你想要的字符放到里面。我們把這個小紙條用“【】”表示。
 
現在給你寫個例子:
  我准備了一張美女名單表(meinv.txt):
美女如下:
    number:A 身高:170cm 年齡:20 
    number:B 身高:180cm 年齡:22 
    number:C 身高:172cm 年齡:23 
    number:D 身高:179cm 年齡:18 
    number:E 身高:171cm 年齡:30 
    number:F 身高:173cm 年齡:23 
    number:G 身高:190cm 年齡:22 

                                  看好了,我要潛規則了!暫且讓egrep當你的手下吧。

zhoubaochuan@baochuan:~/workspace/shell$ egrep 'number:[AEC]' meinv.txt 
    number:A 身高:170cm 年齡:20
    number:C 身高:172cm 年齡:23
    number:E 身高:171cm 年齡:30

 

是不是得到了你想要的美女了?只要把美女的編號寫到小紙條(【】)里,egrep就把你要的美女給你送上來了。

 

字符組的元字符

  現在幻想一下,你是個極其懶惰的家伙。 你不想親自去挑你想要的美女?你只想把比賽的前四名潛規則了。而現在很走運,其中編號是B、C、D、E四個美女獲得了前四名。現在你又把你的小紙條拿出來了,直接在上面寫個范圍,你的手下(egrep)就把這幾個美女給你送上來了。

zhoubaochuan@baochuan:~/workspace/shell$ egrep 'number:[B-E]' meinv.txt 
    number:B 身高:180cm 年齡:22
    number:C 身高:172cm 年齡:23
    number:D 身高:179cm 年齡:18
    number:E 身高:171cm 年齡:30

看到沒有,這里的“-”(連字符),就表示B到E之間所有字符。它表示一個范圍。它跟[BCDE]是一樣的。

以下是常用的:

 表示數字范圍的[0-9];

 表示字母范圍的[a-zA-Z]。

 

總結
 
 由於篇幅所限,暫時寫到此處。若有不當之處,望請指教。
 
推薦
 
 


免責聲明!

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



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