{eval=Array;=+count(Array);}
正則表達式(regular expression,簡稱RegEx或regex)和正則表達式語言已經出現很多年了。但很多人并沒有完全理解整理正則表達式的用途以及它能解決什么樣的問題,還有很多人覺得正則表達式的語法不直觀,有時候甚至難以理解。
事實上,正則表達式其實遠沒有第一眼看上去那么復雜,理解了下面幾個問題,學會正則表達式并不困難。
簡單地說,正則表達式是一些用來匹配和處理文本的字符串,是文本處理方面功能最強大的工具之一。正則表達式語言用來構造正則表達式(最終構造出來的字符串就稱為正則表達式),正則表達式用來完成搜索和替換操作。
與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令。但正則表達式語言并不是一種完備的程序設計語言,更準確地說,正則表達式語言是內置于其他語言或軟件產品里的“迷你”語言。正則表達式既不是可以直接運行的應用程序,也不是可以從哪里購買或下載下來的軟件。在絕大多數的軟件產品、編程語言、實用工具和開發環境里,正則表達式語言都已被實現。
正則表達式是用來完成搜索和替換操作的。
請考慮以下幾個場景:
以上場景是大家在編寫程序時經常會遇到的問題,用任何一種條件處理和字符串操作的編程語言都可以解決,但問題是這種解決方案會變得十分復雜。比較容易想到的辦法是,用一些循環來一次遍歷那些單詞并在循環體里面用一系列if語句來進行測試,這往往意味著你需要使用大量的標志來記錄已經找到了什么、還沒有找到什么,另外少不了要檢查空白字符和特殊字符,等等。而這一切都需要一遍又一遍地以手工方式進行。
另一種解決方案則是使用正則表達式,避開繁瑣的手工步驟,讓搜索和替換變得無比簡單。
和學習編程語言一樣,動手實踐是學習正則表達式的一種非常有效的方式。通過分析下面幾個小案例,你會發現正則表達式其實很簡單:
我們要把car、CAR、Car和CaR都找出來,并且確保scar、carry和incarcerate之類的單詞不會被匹配到。一些比較高級的編輯器提供了“僅匹配整個單詞”選項,但還有很多編輯器并不具備這一功能,而我們往往無法在正在編輯的文檔里做出這種調整。使用正則表達式進行搜索就可以解決這個問題:
表示單詞邊界,[Cc]表示C或c中的任何一個,[Aa]與[Rr]同理,這樣一個簡單的正則表達式語句就解決了單詞搜索的問題。
https?: / / 匹配http:// 或 https:// (?使得字符s成為可選項)。[ - w . ] +匹配主機名。( : d + ) ? 匹配一個可選的端口號。 ( / ( [ w / _ . ] * ) ? ) ?匹配路徑:外層的子表達式匹配 /(如果存在的話),內層的子表達式匹配路徑本身。這個模式雖然無法處理查詢字符串,也不能正確解讀嵌在URL之中的“username:password”(用戶名:密碼)。不過,它已經足以處理絕大多數的URL了(匹配主機名、端口號和路徑)。
上面兩個正則表達式都是用來搜索的,而正則表達式的真正威力體現在替換操作方面:
替換操作需要用到兩個正則表達式:一個用來指定搜索模式,另一個用來指定替換模式。反向引用可以跨模式使用,在第一個模式里匹配的子表達式可以用在第二個模式里。這里使用的模式(w+[w.]*@[w.]+.w+)寫成了一個子表達式。這樣一來,被匹配到的文本就可以用于替換模式。<a href="mailto:$1">$1</a>使用了兩次已匹配的子表達式:一次是在href屬性里(用于指定mailto:),另一次是作為可點擊文本。所以ben@forta.com變成了<a href="mailto:ben@forta.com">ben@forta.com</a> ,這是我們想要的結果。
絕大多數應用程序的“搜索和替換”選項都可以實現這種替換操作,但使用正則表達式來完成這個任務將簡單得讓人難以置信。
以上幾個案例的原理分析和運行代碼分別出自這本《正則表達式必知必會(修訂版)》以及配套網頁BEN FORTA。
讓很多人覺得正則表達式很難的原因之一是缺乏相關的優質資源。一些正則表達式方面的書,以及包含正則表達式教程的大部分Web站點,往往過于偏重語法,只是在講 { 是干什么的,+ 與 * 之間有什么區別。這些東西都不難,真正棘手的地方在于弄明白,該如何運用正則表達式去解決實際問題。
如果你想全面地學習、精通正則表達式,Jeffrey Friedl先生的《精通正則表達式(第3版)》絕對是這方面權威又全面的著作,可以說是一本正則表達式大全。不過,如果你是一位初學者,想盡快上手正則表達式,還是建議題主利用這本《正則表達式必知必會(修訂版)》,由淺入深地學習,并將學到的東西立刻運用于實踐,解決實際問題。
這本書從簡單的文本匹配開始,循序漸進地介紹了很多復雜內容,包括反向引用、條件評估、環視等。每章都配有許多簡明實用的示例,有助于全面、系統、快速掌握正則表達式,并運用它們解決實際問題。配套網頁提供的在線測試工具“regular expression 101”讓你既能動手編寫正則表達式,還能快速查閱在線資料,這些在線工具是測試正則表達式的最簡單的方法。
這邊學會得益于工作中有用到正則表達式的場景,日常配置一些規則匹配http 請求中的url、參數等時,為了更加精準需要配置正則表達式。正則表達式目前使用的場景其實并不多:數據處理、安全防護、搜素引擎等。個人覺得它跟sql語言比較像,除了核心領域外,其他it類工作時不時都會用到,但是就算會了之后一段時間不用就又不會了。總得來說,學會正則表達式需要找到具體使用的場景,且要經常用,不在于勤、多,而在于連、精。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答10
回答0
回答0
回答