色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

你是如何學會正則表達式的?

林玟書2年前14瀏覽0評論

正則表達式(regularexpression,簡稱RegEx或regex)和正則表達式語言已經出現很多年了。但很多人并沒有完全理解整理正則表達式的用途以及它能解決什么樣的問題,還有很多人覺得正則表達式的語法不直觀,有時候甚至難以理解。

事實上,正則表達式其實遠沒有第一眼看上去那么復雜,理解了下面幾個問題,學會正則表達式并不困難。

1.正則表達式是什么?


簡單地說,正則表達式是一些用來匹配和處理文本的字符串,是文本處理方面功能最強大的工具之一。正則表達式語言用來構造正則表達式(最終構造出來的字符串就稱為正則表達式),正則表達式用來完成搜索和替換操作。

與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令。但正則表達式語言并不是一種完備的程序設計語言,更準確地說,正則表達式語言是內置于其他語言或軟件產品里的“迷你”語言。正則表達式既不是可以直接運行的應用程序,也不是可以從哪里購買或下載下來的軟件。在絕大多數的軟件產品、編程語言、實用工具和開發環境里,正則表達式語言都已被實現。

2.正則表達式是用來干什么的?


正則表達式是用來完成搜索和替換操作的。

請考慮以下幾個場景:

  • 你正在搜索一個文件,這個文件里包含單詞car(不區分字母大小寫),但你并不想把包含字符串car的其他單詞(比如scar、carry和incarcerate)也找出來。
  • 你需要在文件里搜索某個特定的文本,但你只想把出現在特定位置(比如每行的開頭或是每條語句的結尾)的文本找出來。
  • 你正在編輯一段源代碼并且要把所有的size都替換為isize,但這種替換僅限于單詞size本身,并不涉及那些包含字符串size的其他單詞。
  • 你編輯了一段包含電子郵件地址的文本?,F在,你想把文本里的電子郵件地址全都轉換為可點擊的鏈接。

以上場景是大家在編寫程序時經常會遇到的問題,用任何一種條件處理和字符串操作的編程語言都可以解決,但問題是這種解決方案會變得十分復雜。比較容易想到的辦法是,用一些循環來一次遍歷那些單詞并在循環體里面用一系列if語句來進行測試,這往往意味著你需要使用大量的標志來記錄已經找到了什么、還沒有找到什么,另外少不了要檢查空白字符和特殊字符,等等。而這一切都需要一遍又一遍地以手工方式進行。

另一種解決方案則是使用正則表達式,避開繁瑣的手工步驟,讓搜索和替換變得無比簡單。

3.正則表達式怎么學?

和學習編程語言一樣,動手實踐是學習正則表達式的一種非常有效的方式。通過分析下面幾個小案例,你會發現正則表達式其實很簡單:

  • 搜索單詞car:

我們要把car、CAR、Car和CaR都找出來,并且確保scar、carry和incarcerate之類的單詞不會被匹配到。一些比較高級的編輯器提供了“僅匹配整個單詞”選項,但還有很多編輯器并不具備這一功能,而我們往往無法在正在編輯的文檔里做出這種調整。使用正則表達式進行搜索就可以解決這個問題:

\b表示單詞邊界,[Cc]表示C或c中的任何一個,[Aa]與[Rr]同理,這樣一個簡單的正則表達式語句就解決了單詞搜索的問題。

  • 匹配URL

https?:\/\/匹配http://或https://(?使得字符s成為可選項)。[-\w.]+匹配主機名。(:\d+)?匹配一個可選的端口號。(\/([\w\/_.]*)?)?匹配路徑:外層的子表達式匹配/(如果存在的話),內層的子表達式匹配路徑本身。這個模式雖然無法處理查詢字符串,也不能正確解讀嵌在URL之中的“username:password”(用戶名:密碼)。不過,它已經足以處理絕大多數的URL了(匹配主機名、端口號和路徑)。

上面兩個正則表達式都是用來搜索的,而正則表達式的真正威力體現在替換操作方面:

  • 把電子郵件地址轉換為可點擊的鏈接:

替換操作需要用到兩個正則表達式:一個用來指定搜索模式,另一個用來指定替換模式。反向引用可以跨模式使用,在第一個模式里匹配的子表達式可以用在第二個模式里。這里使用的模式(\w+[\w\.]*@[\w\.]+\.\w+)寫成了一個子表達式。這樣一來,被匹配到的文本就可以用于替換模式。<ahref="mailto:$1">$1</a>使用了兩次已匹配的子表達式:一次是在href屬性里(用于指定mailto:),另一次是作為可點擊文本。所以ben@forta.com變成了<ahref="mailto:ben@forta.com">ben@forta.com</a>,這是我們想要的結果。

絕大多數應用程序的“搜索和替換”選項都可以實現這種替換操作,但使用正則表達式來完成這個任務將簡單得讓人難以置信。

以上幾個案例的原理分析和運行代碼分別出自這本《正則表達式必知必會(修訂版)》以及配套網頁BENFORTA。

讓很多人覺得正則表達式很難的原因之一是缺乏相關的優質資源。一些正則表達式方面的書,以及包含正則表達式教程的大部分Web站點,往往過于偏重語法,只是在講{是干什么的,+與*之間有什么區別。這些東西都不難,真正棘手的地方在于弄明白,該如何運用正則表達式去解決實際問題。

如果你想全面地學習、精通正則表達式,JeffreyFriedl先生的《精通正則表達式(第3版)》絕對是這方面權威又全面的著作,可以說是一本正則表達式大全。不過,如果你是一位初學者,想盡快上手正則表達式,還是建議題主利用這本《正則表達式必知必會(修訂版)》,由淺入深地學習,并將學到的東西立刻運用于實踐,解決實際問題。

這本書從簡單的文本匹配開始,循序漸進地介紹了很多復雜內容,包括反向引用、條件評估、環視等。每章都配有許多簡明實用的示例,有助于全面、系統、快速掌握正則表達式,并運用它們解決實際問題。配套網頁提供的在線測試工具“regularexpression101”讓你既能動手編寫正則表達式,還能快速查閱在線資料,這些在線工具是測試正則表達式的最簡單的方法。


@人民郵電出版社,在這里發現更多優質圖書與學習資源。