{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

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

eternalshalloweternalshallow 回答0 收藏1
收藏問題

3條回答

Chiclaim

Chiclaim

回答于2022-06-28 14:08

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

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


1.正則表達式是什么?


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

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


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


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

請考慮以下幾個場景:

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

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

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


3.正則表達式怎么學?


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

  • 搜索單詞car:

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

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

  • 匹配URL

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”讓你既能動手編寫正則表達式,還能快速查閱在線資料,這些在線工具是測試正則表達式的最簡單的方法。


歡迎關注@人民郵電出版社 頭條號,在這里發現更多優質圖書與學習資源。

評論0 贊同0
  •  加載中...
Chaz

Chaz

回答于2022-06-28 14:08

這邊學會得益于工作中有用到正則表達式的場景,日常配置一些規則匹配http 請求中的url、參數等時,為了更加精準需要配置正則表達式。正則表達式目前使用的場景其實并不多:數據處理、安全防護、搜素引擎等。個人覺得它跟sql語言比較像,除了核心領域外,其他it類工作時不時都會用到,但是就算會了之后一段時間不用就又不會了。總得來說,學會正則表達式需要找到具體使用的場景,且要經常用,不在于勤、多,而在于連、精。

評論0 贊同0
  •  加載中...
caikeal

caikeal

回答于2022-06-28 14:08

應該是通過理論性的學習加上實踐的感悟和總結而得,掌握辨清事非,對與錯,白與黑的能力,在表達時因人因事就會由感而發。

評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<