2018年,我印象最深刻的一本書

Jeffrey Y.發表於2018-05-06

【圖靈徵文活動】

無論是在日常的一般工作中還是程式設計中,與我們打交道最為頻繁的東西就是各種編輯器,不可否認的是,我們天天都在和那一串串、一行行的字串打交道。對於程式設計者而言,字串的處理那就更是家常便飯。

有時候,我們需要對大量的文字通過程式碼進行解析,以抽取關鍵內容;有時候,我們需要對各種使用者的輸入進行非常苛刻的、符合特定業務邏輯條件的合法性檢查;甚至有時候,我們在工作中,需要手動對一些大文字進行 copy & paste 的操作,貼上的文字之後可能需要做批量格式轉換才能用在另外的地方(在我十多年的工作中,就經常遇到過這種問題。如果純手工的操作,你會奔潰的!)。所以說,在我們的開發中,如何高效的處理字串、提高效率就成為了每一個程式設計師日常工作中非常重要的一部分。

這一強大的工具就是正規表示式。幾年前,對於剛接觸正則的我,對於正則似乎有著一種在很多程式設計師看來非常不感冒的莫名的歡喜心和好奇心。於是,在網上一番搜尋之後,買下了個這本看似名字很裝逼,但實際上內容非常牛逼的大神作品《精通正規表示式》(第三版)。為什麼說看似裝逼呢?因為“精通”一詞在茫茫書海中早已經被用爛了,凡是“精通XXX”基本上就和精通沒啥關係了。就好像很多“XXX 高階程式設計”跟高階其實也沒啥關係。

當你閱讀完整本書並能完全理解的時候,不誇張的說,你就會有一種“被打通了任督二脈”的感覺。他不僅能幫你更好的系統性地理解正規表示式,而且還能幫你完善自己的邏輯思維,用正則去思考問題(think regular expression),用正則去解決問題。實際上,與其說能夠幫助你在工作中更好地解決問題,倒不如說能夠極大地提高你的工作效率。下面舉兩個平時工作中的例子:

比如:我們平時在釋出應用程式的時候,config 檔案是不能直接 copy paste 的,需要用自己的本地檔案和 production 環境的檔案進行比較,以確定哪些地方需要修改,但是有時候,程式並不是你寫的,但是你接手了,你需要使用專門的檔案比對工具對 config 檔案進行比較。有時候你會發現,配置檔案中會出現一個包含非常長的文字的節點(鬼知道他為什麼要這麼做)。文字密密麻麻的使用指定的分隔符(一般是分號/豎線等等)進行分割,但是並未換行,每一個分隔符之間的分段子串又套著指定格式的“馬甲”或者“全裸”,即便設定了自動換行,比較器(即便是優秀的 beyondcompare)的顯示結果中清晰直觀的比對效果也會讓你頭暈,這個時候最好的方法就是使用正則先對文字進行替換,用換行替換分隔符,然後對文字進行比較,區別之處就顯而易見了

再考慮以下場景。我有一個 XML 檔案,裡面包含了上萬行的程式碼。根節點下面有若干個 <set> 節點,每一個 <set> 節點下面包含上千個 <identifier> 節點,每個 <identifier> 節點都有一個 value attribute,類似於 <identifier value="827373632" />,當進行測試的時候,我們需要對結果進行驗證,驗證最有效的方式就是抽取指定 <set> 節點下面的這些 <identifier> 的 value 的值,並將這些值加上單引號,並用逗號進行分割、拼接,但是呢,又不能拼成一整行,需要每 7 – 10 個 value 換一行,並且在頭尾加上小括號,這樣程式碼會看起來直觀整潔。就像下面這樣:

Select * from SomeTable
where productID in 
(
    ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’,
    ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’,
    ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’, ‘12345’,
    ......
)

類似的使用場景還有很多,以上這些都可以在 VS 編輯器中使用正規表示式進行替換,還有更為複雜的替換在此不一一列舉,真的很強大。當使用正則語法替換出想要的東西瞬間刷屏的時候,會有一種莫名的舒心感~

相關文章