如何使用基本正則表示式更好地搜尋和節省時間

無論你是在用Grep搜尋,還是在尋找可以批次重新命名檔案的程式,你可能都想知道是否有更簡單的方法來完成你的工作。謝天謝地,有,它被稱為“正則表示式”...

如何使用基本正則表示式更好地搜尋和節省時間

無論你是在用Grep搜尋,還是在尋找可以批次重新命名檔案的程式,你可能都想知道是否有更簡單的方法來完成你的工作。謝天謝地,有,它被稱為“正則表示式”

(漫畫來自XKCD.com網站)

什麼是正則表示式(regular expressi***)?

正則表示式是以非常特定的方式格式化的語句,可以代表許多不同的結果。也稱為“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]

方括號–[和]–告訴解析引擎,無論內部是什麼,任何一個字元都可以用來匹配。這些括號內的任何內容都稱為字符集。

因此,如果我們有一個龐大的條目列表,並且我們使用這個正則表示式來搜尋,那麼以下術語將匹配:

  • 湯姆
  • 湯姆0
  • 湯姆1
  • 湯姆2
  • 湯姆3

等等。但是,以下列表將不匹配,因此不會顯示在結果中:

  • 西紅柿;正則表示式不解釋“湯姆”後面的任何字母
  • 湯姆;正則表示式區分大小寫!

您還可以選擇使用句點(.)進行搜尋,只要存在字元,句點(.)將允許存在任何字元。

如何使用基本正則表示式更好地搜尋和節省時間

正如你所見,與

.tom

沒有提到開頭只有“湯姆”的詞。甚至“綠色西紅柿”也出現了,因為“tom”之前的空格算作一個字元,但像“tomF”這樣的詞在開頭沒有字元,因此被忽略了。

注意:Grep的預設行為是在某些部分與regex匹配時返回整行文字。其他程式可能不會這樣做,您可以在grep中用“-o”標誌關閉它。

也可以使用管道(|)指定替換,如下所示:

speciali(s|z)e

這將發現:

  • 專攻
  • 專門從事

在使用grep命令時,我們需要用反斜槓轉義特殊字元(、|和),並使用“-E”標誌來實現這一點,避免出現難看的錯誤。

如何使用基本正則表示式更好地搜尋和節省時間

正如我們上面提到的,這是因為我們需要告訴bashshell將這些字元傳遞給grep,而不要對它們做任何事情。“-E”標誌告訴grep使用括號和管道作為特殊字元。

可以使用方括號內和集合開頭的**符號進行排除搜尋:

tom[^F|0-9]

再說一次,如果你在使用grep和bash,記得逃出那個管道!

如何使用基本正則表示式更好地搜尋和節省時間

在列表中但未顯示的術語包括:

  • 湯姆0
  • 湯姆5
  • 湯姆9
  • 托夫

這些和我們的正則表示式不匹配。

如何利用環境?

通常,我們根據邊界進行搜尋。有時我們只希望字串出現在一個詞的開頭、一個詞的結尾或一行程式碼的末尾。這是很容易做到的使用我們所謂的錨。

使用**符號(括號外)可以指定行的“開始”。

^tom

如何使用基本正則表示式更好地搜尋和節省時間

要搜尋行的末尾,請使用美元符號。

tom$

如何使用基本正則表示式更好地搜尋和節省時間

您可以看到,在本例中,我們的搜尋字串位於錨點之前。

您也可以選擇出現在單詞開頭或結尾的匹配項,而不是整行。

\<tom

tom\>

如何使用基本正則表示式更好地搜尋和節省時間

如何使用基本正則表示式更好地搜尋和節省時間

正如我們在本文開頭的註釋中提到的,我們需要轉義這些特殊字元,因為我們使用的是bash。或者,也可以使用單引號:

如何使用基本正則表示式更好地搜尋和節省時間

如何使用基本正則表示式更好地搜尋和節省時間

結果是一樣的。確保使用單引號,而不是雙引號。

高階regexp的其他資源

我們只觸及冰山一角。您還可以搜尋貨幣標記所描繪的貨幣術語,並搜尋三個或更多匹配術語中的任意一個。事情會變得非常複雜。如果你對學習正則表示式感興趣,那麼請看下面的原始碼。

  • Zytrax.com網站有幾頁具體的例子,說明為什麼事情會和不匹配。
  • 常規-表示式.info也有一個**指南很多更先進的東西,以及一個方便的參考頁。
  • Gnu.org網站有一個專門用於將regexps與grep一起使用的頁面。

您還可以使用免費的基於Flash的線上工具RegExr構建和測試正則表示式。它是免費的,可以在大多數瀏覽器中使用。


你喜歡用正則表示式嗎?知道一個偉大的批次重新命名器使用它們嗎?也許你只是想吹噓你的格瑞普。透過評論貢獻你的想法!

 

  • 發表於 2021-04-12 20:50
  • 閱讀 ( 28 )
  • 分類:網際網路

你可能感興趣的文章

如何在microsoftword中使用樣式並節省時間

... 在本文中,我們將向您展示如何使用Word樣式功能來自動設定文件格式。 ...

  • 發佈於 2021-03-12 04:15
  • 閲讀 ( 46 )

如何使用附件管理器在gmail中節省時間

使用正確的Gmail搜尋過濾器,用一些彩色標籤來組織你的收件箱。這是Gmail處理附件的常用方式。但如果我告訴你有更好的辦法呢?和Chrome上的大多數東西一樣,這個解決方案是以Gmail擴充套件的形式出現的。 ...

  • 發佈於 2021-03-12 07:19
  • 閲讀 ( 42 )

10個自動化任務和節省時間的生產力機器人

... Futurenda的妙處在於它如何智慧地管理您的待辦事項。它同時適用於iOS和Android,在Google Play商店的排名是五分之四。 ...

  • 發佈於 2021-03-12 19:45
  • 閲讀 ( 59 )

更快地搜尋excel電子表格:用索引和匹配替換vlookup

還在用VLOOKUP?以下是索引和匹配如何提供更好的解決方案。 ...

  • 發佈於 2021-03-14 15:37
  • 閲讀 ( 55 )

如何在多個檔案中查詢和替換單詞

... 如何批次編輯多個檔案 ...

  • 發佈於 2021-03-14 20:34
  • 閲讀 ( 55 )

透過這5門課程,深入瞭解更多谷歌生產力的技巧和竅門

...困難的。所以,為什麼不學習一下谷歌的一些工具,以及如何最大限度地利用它們呢。利益會反彈回來給我們。 ...

  • 發佈於 2021-03-14 23:31
  • 閲讀 ( 68 )

13個被忽視的chrome擴充套件,減少點選和節省時間

... 那麼,如何檢查亞馬遜的價格是否真的是一筆交易呢?使用camel網站檢視專案的定價歷史記錄。如果低於平均水平,那麼是的,成交了。但是,使用Camelizer可以節省更多的時間,...

  • 發佈於 2021-03-15 11:04
  • 閲讀 ( 54 )

基本的windows執行命令備忘表

...自定義命令名替換它們。我們將在Run對話方塊中向您展示如何做到這一點。 ...

  • 發佈於 2021-03-18 15:02
  • 閲讀 ( 57 )

為編寫者和開發人員提供的5個最佳mac檔案比較工具

...、Java存檔、ZIP、XML、PDF等。說到這裡,我們已經介紹瞭如何使用其他方法比較兩個Excel檔案。 ...

  • 發佈於 2021-03-18 17:33
  • 閲讀 ( 48 )

5種節省時間和精力的專業電子郵件寫作方法

...怎麼辦?”作為一個成年人,這是一個基本的技能,知道如何寫專業電子郵件,節省時間和得到答覆。 ...

  • 發佈於 2021-03-19 12:29
  • 閲讀 ( 51 )