無論你是在用Grep搜尋,還是在尋找可以批次重新命名檔案的程式,你可能都想知道是否有更簡單的方法來完成你的工作。謝天謝地,有,它被稱為“正則表示式”
(漫畫來自XKCD.com網站)
正則表示式是以非常特定的方式格式化的語句,可以代表許多不同的結果。也稱為“regex”或“regexp”,它們主要用於搜尋和檔案命名功能。一個正則表示式可以像一個公式一樣用來建立許多不同的可能輸出,所有這些輸出都會被搜尋。或者,您可以透過指定regex來指定一組檔案的命名方式,並且您的軟體可以增量地移動到下一個預期的輸出。透過這種方式,您可以非常輕鬆高效地重新命名多個資料夾中的多個檔案,並且可以超越簡單編號系統的限制。
因為正則表示式的使用依賴於特殊的語法,所以您的程式必須能夠讀取和解析它們。許多用於Windows和OS X的批處理檔案重新命名程式都支援regexps,以及跨平臺搜尋工具GREP(我們在Bash Scripting for Beginers Guide中介紹了GREP)和用於*Nix的Awk命令列工具。此外,許多可選的檔案管理器、啟動器和搜尋工具都使用它們,它們在Perl和Ruby等程式語言中佔有非常重要的地位。其他開發環境,如.NET、java和Python,以及即將到來的C++ 11,都提供了使用正則表示式的標準庫。正如您所想象的,當您試圖最小化程式中的程式碼量時,它們會非常有用。
在我們用例子向你們展示之前,我們想指出一些事情。我們將使用bashshell和grep命令演示如何應用正則表示式。問題是,有時我們需要使用需要傳遞給grep的特殊字元,bash shell將解釋該字元,因為shell也使用它。在這種情況下,我們需要“逃離”這些人物。這可能會讓人困惑,因為這種字元的“轉義”也發生在regexp中。例如,如果我們想在grep中輸入:
\<
我們必須用以下內容替換:
\\\<
這裡的每個特殊字元都有一個反斜槓。或者,也可以使用單引號:
‘\<’
單引號告訴巴什不要解釋它們的內部。雖然我們需要採取這些步驟,以便我們能夠為您演示,但是您的程式(特別是基於GUI的程式)通常不需要這些額外步驟。為了保持簡單和簡單,實際的正則表示式將作為引用文字提供給您,您將在命令列截圖中看到轉義語法。
regexp是一種非常簡潔的表述術語的方法,這樣您的計算機就可以將它們擴充套件為多個選項。我們來看看下面的例子:
tom[0123456789]
方括號–[和]–告訴解析引擎,無論內部是什麼,任何一個字元都可以用來匹配。這些括號內的任何內容都稱為字符集。
因此,如果我們有一個龐大的條目列表,並且我們使用這個正則表示式來搜尋,那麼以下術語將匹配:
等等。但是,以下列表將不匹配,因此不會顯示在結果中:
您還可以選擇使用句點(.)進行搜尋,只要存在字元,句點(.)將允許存在任何字元。
正如你所見,與
.tom
沒有提到開頭只有“湯姆”的詞。甚至“綠色西紅柿”也出現了,因為“tom”之前的空格算作一個字元,但像“tomF”這樣的詞在開頭沒有字元,因此被忽略了。
注意:Grep的預設行為是在某些部分與regex匹配時返回整行文字。其他程式可能不會這樣做,您可以在grep中用“-o”標誌關閉它。
也可以使用管道(|)指定替換,如下所示:
speciali(s|z)e
這將發現:
在使用grep命令時,我們需要用反斜槓轉義特殊字元(、|和),並使用“-E”標誌來實現這一點,避免出現難看的錯誤。
正如我們上面提到的,這是因為我們需要告訴bashshell將這些字元傳遞給grep,而不要對它們做任何事情。“-E”標誌告訴grep使用括號和管道作為特殊字元。
可以使用方括號內和集合開頭的**符號進行排除搜尋:
tom[^F|0-9]
再說一次,如果你在使用grep和bash,記得逃出那個管道!
在列表中但未顯示的術語包括:
這些和我們的正則表示式不匹配。
通常,我們根據邊界進行搜尋。有時我們只希望字串出現在一個詞的開頭、一個詞的結尾或一行程式碼的末尾。這是很容易做到的使用我們所謂的錨。
使用**符號(括號外)可以指定行的“開始”。
^tom
要搜尋行的末尾,請使用美元符號。
tom$
您可以看到,在本例中,我們的搜尋字串位於錨點之前。
您也可以選擇出現在單詞開頭或結尾的匹配項,而不是整行。
\<tom
tom\>
正如我們在本文開頭的註釋中提到的,我們需要轉義這些特殊字元,因為我們使用的是bash。或者,也可以使用單引號:
結果是一樣的。確保使用單引號,而不是雙引號。
我們只觸及冰山一角。您還可以搜尋貨幣標記所描繪的貨幣術語,並搜尋三個或更多匹配術語中的任意一個。事情會變得非常複雜。如果你對學習正則表示式感興趣,那麼請看下面的原始碼。
您還可以使用免費的基於Flash的線上工具RegExr構建和測試正則表示式。它是免費的,可以在大多數瀏覽器中使用。
你喜歡用正則表示式嗎?知道一個偉大的批次重新命名器使用它們嗎?也許你只是想吹噓你的格瑞普。透過評論貢獻你的想法!
... 在本文中,我們將向您展示如何使用Word樣式功能來自動設定文件格式。 ...
使用正確的Gmail搜尋過濾器,用一些彩色標籤來組織你的收件箱。這是Gmail處理附件的常用方式。但如果我告訴你有更好的辦法呢?和Chrome上的大多數東西一樣,這個解決方案是以Gmail擴充套件的形式出現的。 ...
... Futurenda的妙處在於它如何智慧地管理您的待辦事項。它同時適用於iOS和Android,在Google Play商店的排名是五分之四。 ...
...困難的。所以,為什麼不學習一下谷歌的一些工具,以及如何最大限度地利用它們呢。利益會反彈回來給我們。 ...
... 那麼,如何檢查亞馬遜的價格是否真的是一筆交易呢?使用camel網站檢視專案的定價歷史記錄。如果低於平均水平,那麼是的,成交了。但是,使用Camelizer可以節省更多的時間,...
...、Java存檔、ZIP、XML、PDF等。說到這裡,我們已經介紹瞭如何使用其他方法比較兩個Excel檔案。 ...
...怎麼辦?”作為一個成年人,這是一個基本的技能,知道如何寫專業電子郵件,節省時間和得到答覆。 ...