當前位置:
首頁 > 知識 > 正則表達式的分組和數字

正則表達式的分組和數字

正則表達式的分組和數字

打開今日頭條,查看更多圖片

大約一周前,我在編輯一個程序時想要更改一些變數名。我之前認為這將是一個簡單的正則表達式查找/替換。只是這沒有我想像的那麼簡單。

-- Dr.drang

大約一周前,我在編輯一個程序時想要更改一些變數名。我之前認為這將是一個簡單的正則表達式查找/替換。只是這沒有我想像的那麼簡單。

變數名為 a10、v10 和 x10,我想分別將它們改為 a30、v30 和 x30。我想到使用 BBEdit 的查找窗口並輸入:

正則表達式的分組和數字

Mistaken BBEdit replacement pattern

我不能簡單地 30 替換為 10,因為代碼中有一些與變數無關的數字 10。我認為我很聰明,所以我不想寫三個非正則表達式替換,a10、v10 和 x10,每個一個。但是我卻沒有注意到替換模式中的藍色。如果我這樣做了,我會看到 BBEdit 將我的替換模式解釋為「匹配組 13,後面跟著 0,而不是」匹配組 1,後面跟著 30,後者是我想要的。由於匹配組 13 是空白的,因此所有變數名都會被替換為 0。

你看,BBEdit 可以在搜索模式中匹配多達 99 個分組,嚴格來說,我們應該在替換模式中引用它們時使用兩位數字。但在大多數情況下,我們可以使用 1 到 9 而不是 1 到 9,因為這沒有歧義。換句話說,如果我嘗試將 a10、v10 和 x10 更改為 az、vz 和 xz,那麼使用 1z的替換模式就可以了。因為後面的 z 意味著不會誤解釋該模式中 1。

因此,在撤消替換後,我將模式更改為這樣:

正則表達式的分組和數字

Two-digit BBEdit replacement pattern

它可以正常工作。

還有另一個選擇:命名組。這是使用 var 作為模式名稱:

正則表達式的分組和數字

Named BBEdit replacement pattern

我從來都沒有使用過命名組,無論正則表達式是在文本編輯器還是在腳本中。我的總體感覺是,如果模式複雜到我必須使用變數來跟蹤所有組,那麼我應該停下來並將問題分解為更小的部分。

順便說一下,你可能已經聽說 BBEdit 正在慶祝它誕生 25周年 。當一個有良好文檔的應用有如此長的歷史時,手冊的積累能讓人愉快地回到過去的日子。當我在 BBEdit 手冊中查找命名組的表示法時,我遇到了這個說明:

正則表達式的分組和數字

BBEdit regex manual excerpt

BBEdit 目前的版本是 12.5。第一次出現於 2001 年的 V6.5。但手冊希望確保長期客戶(我記得是在 V4 的時候第一次購買)不會因行為變化而感到困惑,即使這些變化幾乎發生在二十年前。


via: https://leancrew.com/all-this/2019/02/regex-groups-and-numerals/

作者: Dr.Drang 選題: lujun9972 譯者: geekpi 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


點擊「了解更多」可訪問文內鏈接

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux技術 的精彩文章:

【每日安全資訊】2019網路安全威脅報告 黑客最快20分鐘內得逞

TAG:Linux技術 |