歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux正則表達式

你可能熟悉一個計算器解釋的表達式。請看下面的算術表達式:
2+4
"2加4" 出幾個常數或字面值和一個操作符組成。計算器程序必須能夠識別,例如, "2" 是數字常數而加號表示一個操作符,而不能解釋為"+"字符。

表達式告訴計算機如何產生結果。盡管我們真正想要的就是"2+4"的結果,但我們不能簡單地告訴計算機返回6。我們指示計算機計算表達式並返回值。表達式可以比"2+4"更復雜,事實上,它由多個簡單的表達式組成,例如:
2+3*4

計算器通常從左到右計算表達式。然而,某些操作符比其他操作符的優先級高,也就是,它們將被首先執行。因此,上面的表達式的結果為14 而不是20 ,因為乘法的優先級高於加法。將簡單的表達式放入圓括號中可以改變優先級,因此"(2+3)*4" 或"2加3的和的4倍"的結果為20。因括號是指示計算器改變表達式計算順序的符號。

相反,一個正則表達式描述了一種模式或字符序列。字符串連接是每個正則表達式的基本操作。也就是一個模式匹配相鄰的一系列字符。請看下面的正則表達式:
ABE

每個字面字符都是一個正則表達式,它只匹配那個單獨的字符。這個表達式描述了"B跟著A, E跟著B" 或簡單稱為"字符串ABE" 。術語"字符串"意味著每個字符都與它前面的字符相連接。不一定要將正則表達式描述為由字符序列組成(初學者傾向於將其考慮成由較高級的單元組成,例如由單詞而不是獨立的字符組成)。正則表達式區分大小寫,因此"A"不匹配"a"。

接受正則表達式的程序(例如grep) 必須首先解析正則表達式的語法來產生一個模式。然後它們一行一行地讀取輸入未嘗試匹配該模式。輸入行是一個字符串、而且要看字符串與模式是否匹配,程序將字符串的第一個字符與模式的第一個字符進行比較。如果匹配,就比較第二個字符。無論何時只要匹配失敗,就返回並從字符串中這個字符後面的字符重新開始匹配。

正則表達式不只限於文字字符。例如,元字符句點(.)可以作為"通配符"匹配任何單個字符。你可以認為這個通配符與Scrabble 中的空白類似,可以表示任意字母。因此,我們可以指定正則表達式"A.E" 而且它將和"ACE" 、"ABE" 和"ALE" 都匹配。句點與"A"後面的位置上的任何字符匹配。

元字符* (星號)用於與它前面的正則表達式的零個或多個出現匹配,該表達式通常是一個字符。你也許對*作為一個shell元字符更熟習,在那裡它表示"零或多個字符"。但是這與它在正則表達式中的含義不同。星號元字符本身不匹配任何字符、它用於修改它前面的內容。正則表達式*匹配任意數目的字符,而在she11中,*本身就具有這種含義(例如,在shell中, ls*表示列出當前目錄中的所有的文件)。正則表達式"A.*E"匹配任何與"A.E"匹配的字符串,但是它還匹配在"A"和"E"之間具有任意數目的字符;例如,"A|RPLANE"、"A FINE" 、" AFF ABLE" 或"A LONG WAY HOME"。注意"任意數目的字符"可以是零個字符!

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-05/117894p2.htm

Copyright © Linux教程網 All Rights Reserved