基礎正則表達式介紹與練習
一、什么是正則表達式
在做文字處理或編寫程序時,用到查找、替換等功能,使用正則表達式能夠簡單快捷的完成目標。簡單而言,正則表達式通過一些特殊符號的幫助,使用戶可以輕松快捷的完成查找、刪除、替換等處理程序。例如 grep, expr, sed , awk. 或 Vi 中經常會使用到正則表達式,為了充分發揮 shell 編程的威力,需要精通正則表達式。正規表示法基本上是一種『表示法』, 只要工具程序支持這種表示法,那么該工具程序就可以用來作為正規表示法的字符串處理之用。 也就是說,例如 vi, grep, awk ,sed 等等工具,因為她們有支持正規表示法, 所以,這些工具就可以使用正規表示法的特殊字符來進行字符串的處理。
二、正則表達式特殊符號
首先是正則表達式的特殊符號:
[:alnum:]代表英文大小寫字母及數字
[:alpha:]代表英文大小寫字母
[:blank:]代表空格和 tab 鍵
[:cntrl:]鍵盤上的控制按鍵,如 CR,LF,TAB,DEL [:digit:]代表數字 [:graph:]代表空白字符以外的其他 [:lower:]小寫字母 [:print:]可以被打印出來的任何字符 [:punct:]代表標點符號 [:upper:]代表大寫字符 [:space:]任何會產生空白的字符如空格,tab,CR 等 [:xdigit:]代表 16 進位的數字類型
特殊符號實例
任意建立一個文本并編輯。或者以原有的文本做實驗皆可。
$ touch regular_express.txt
$ vi regular_express.txt //或者 sudo gedit regular_express.txt
操作截圖:
文本內容為:
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh!My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird
查找小寫字母:
$ grep -n '[[:lower:]]' regular_express.txt
操作截圖:
藍色為匹配成功的字符
查找數字:
# grep -n '[[:digit:]]' regular_express.txt
操作截圖:
三、語系對正則表達式的影響
由于不同語系的編碼數據不同,所以造成不同語系的數據選取結果有所差異。以英文大小寫為例,zh_CN.big5 及 C 這兩種語系差異如下:
- LANG=C 時: 0 1 2 3 4....ABCDE...Zabcde...z
- LANG=zh_CN 時:0 1 2 3 4...aAbBcCdD.....zZ
在使用正則表達式[A-Z]時, LANG=C 的情況下,找到的僅僅是大寫字符 ABCD..Z。而在 LANG=zh_CN 情況下,會選取到 AbBcCdD.....zZ 字符。因此在使用正則表達式時要特別留意語系。
由于我們一般使用的兼容與 POSIX 的標準,因此使用 C 語系。
四、簡單例子 :ls 命令正則表達式應用
ls 命令是 linux 下最常用的命令。ls 命令是 list 的縮寫,缺省下 ls 用來打印出當前目錄的清單。
命令中‘ * ’號是正則表達式的一種,代表任意字符串。
$ ls
$ ls a* //打印出以 a 開頭的文件及內容或者目錄
$ ls *s //打印以 s 結尾的文件及內容或者目錄
$ ls Pub* // Public 文件為空,所有沒有打印任何內容
$ ls e* //沒有以 e 開頭的文件,所有顯示沒有找到匹配項
操作截圖: