這樣用好正則表達式,生活、工作都能事半功倍
摘要:當然了,爲了使用正則表達式的匹配模式,需要在 VSCode 和 Sublime Text 中查找時點亮「.*」的標記。於是,當我們在「替換」中輸入 $1 的時候,它會從「查找」框中尋找第一個括號,並使用匹配到的第一個括號裏的內容來替換 $1 的部分。
Matrix 精選
Matrix 是少數派的寫作社區,我們主張分享真實的產品體驗,有實用價值的經驗與思考。我們會不定期挑選 Matrix 最優質的文章,展示來自用戶的最真實的體驗和觀點。
文章代表作者個人觀點,少數派僅對標題和排版略作修改。
正則表達式原本是計算機科學裏的術語,後來引入到程序語言中,在工程上也廣泛應用。不過,對於大部分讀者來說,即使我們不寫程序、不做計算機技術相關工作,依然可以在生活、工作中嘗試使用正則表達式。許多時候,若是使用正則表達式來完成,往往可以事半功倍。
它讓 VSCode 的「查找」「替換」如虎添翼
我們在日常生活或者工作中,總是會碰到需要「批量處理文本」的時候。昨天我朋友在煩惱工作上的一件小事情。她需要處理數百個手機號,每行一個,需要在每個手機號的前後分別加上一個雙引號。
最終變成:
"13100002222" "13100003333" "13100004444" "13100005555" "13312345678" "13987654321"
也許你會選擇手動一行一行敲入引號 "
,亦或會動用 Excel 中強大的公式。然而,使用 Visual Studio Code、Sublime Text 等支持正則表達式替換的文本編輯器,這完全是小菜一碟。
在 VSCode 中,首先使用 option+command+F
(macOS) 或者 Ctrl+H
(Windows)打開「查找替換」欄。在第一行「查找」框中輸入 \d+
,在第二行「替換」框中輸入 "$0"
,最後點擊「替換全部」按鈕(在「替換」框右側的第二個按鈕),所有操作就都完成了。
在 Sublime Text 中也是同樣的操作。
當然了,爲了使用正則表達式的匹配模式,需要在 VSCode 和 Sublime Text 中查找時點亮「.*」的標記。這個按鈕在 VSCode 查找框內的最右側,在 Sublime Text 查找欄的左上角。
現在可以來稍微解釋一下這裏用到的兩個表達式了。
在「查找」框中,我們填入的是 \d+
,意思是「一個或更多的數字」。正則表達式中, \d
表示「數字」,而 +
表示「一個或更多」。
在「替換」框中,我們填入的是 "$0"
,很好理解,就是在前面查找出來的每一個結果兩側加上 "
雙引號。這裏, $0
可以用來「引用」整個匹配到的結果。
當然了,替換時的 $
符號還可以有 $1
、 $2
、 $3
……
還是剛纔的那些手機號,現在換成了稍微複雜一些的規則。查找時,輸入的規則是 (\d{3})(\d{4})(\d{4})
,替換時的規則是 $1-$2-$3
。最後,我們得到了:
在這個規則中, \d{3}
意味着「3個數字」, \d{4}
以爲着「4個數字」。於是我通過 \d{3}\d{4}\d{4}
這樣一個規則,把號碼分成了 3、4、4 的三段。對於匹配到的每一段,我都加上了一個括號。
於是,當我們在「替換」中輸入 $1
的時候,它會從「查找」框中尋找第一個括號,並使用匹配到的第一個括號裏的內容來替換 $1
的部分。至於 $2
和 $3
,便是在查找時去匹配第二、第三個括號中的內容。
它讓 Everything 的搜索比快更快
Everything 是 Windows 上一款頗受好評的文件搜索工具,在 Windows 上實現了文件「即時搜索」的效果。
然而,Everything 搜索文件雖然很快,但是遇到文件名記不清的情況,就只能輸入幾個關鍵詞,在搜出的一大片文件列表中逐個確認,未免有些費時。
我曾經保存了一個圖片,名字就叫 apple
,但是卻忘記了它的文件格式。到底是 jpg 還是 png?還是 gif 或者 bmp?也可能是 jpeg 或者 webp?
直接使用 Everything 的普通模式搜索時,會出現數百個結果。
使用快捷鍵 Ctrl+R
打開「正則表達式」的開關,就可以使用正則表達式來進行匹配了。打開後,在 Everything 右下角的狀態欄中會出現「正則表達式」的文字。
這樣一來,搜索結果就只剩下了 4 個,尋找起來比剛纔省事很多。
我在這裏使用的正則表達式也並不複雜。 ^apple\..{3,}$
中, ^
和 $
分別表示文件名的起始位置和結束位置,意味着在匹配到的結果前後都不再有其他字符。 \.
表明一個小數點 .
,也就是文件名和擴展名之間間隔的那個點。後面的 .{3,}
意味着「3 個或更多的任意字符」,匹配了擴展名中可能存在的 3 個或更多字符。
市面上也有一些其他文件搜索工具,使用了和 Everything 相似的技術原理,卻鮮見對正則表達式的完備支持。然而,如果沒有了正則表達式,這些文件搜索工具速度再快,也是沒有靈魂的。
它讓 Tasker 和快捷指令錦上添花
當你在你的 Android 手機上收到一條驗證碼,如何把它快速複製到你的剪貼板裏呢?現在各大定製 OS 都提供了「複製驗證碼」的功能,但是仍需手動點擊通知中的「複製」按鈕。藉助 Tasker 我們可以實現更加自動化的複製。
- 設置 PROFILE,當收到新短信時觸發
- 檢查短信中是否包含驗證碼
- 如果包含驗證碼,提取並複製到剪貼板
- 直接在對應的 APP 裏面粘貼
對於其中的第二步「檢查短信中是否包含驗證碼」,就又是正則表達式大展拳腳的地方了。
我這裏使用了一個簡單粗暴的方式來檢查驗證碼內容:是否包含連續 4-8 個數字。正則表達式用的是 \d{4,8}
,也就是從短信中尋找連續的 4-8 個數字,並放到剪貼板中。
iOS 上的「快捷指令」同樣可以使用正則表達式進行匹配和替換。比如下圖中的這個快捷指令,可以在分享知乎鏈接的時候,只複製最精簡的的回答鏈接。
如果直接複製,你得到的可能是這樣一大段文字:
三體中,歌者爲什麼那麼輕易就使用二向箔? — 王東凱陪你考注會 的回答 - 知乎 https://www.zhihu.com/question/304759872/answer/1079833112?utm_source=ZHShareTargetIDMore&utm_medium=social&utm_oi=26915779903488
而藉助這個快捷指令,你可以直接獲得下面的鏈接:
https://www.zhihu.com/question/304759872/answer/1079833112
用於匹配的正則表達式是這樣的:
https://www.zhihu.com/question/\d+/answer/\d+
它可以尋找到符合格式要求的網址,並通過後續的動作複製到剪貼板中。
總之,無論是在 Windows 和 macOS 上處理文本,還是在 Everything 中搜索文件,亦或是在手機和平板電腦上進行自動化的操作,如果一個工具可以支持正則表達式,如果你能夠善用正則表達式,那它一定會給你帶來許多新的可能性。
> 下載少數派客戶端、關注少數派公衆號,瞭解更精彩的數字生活 :leaves: