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

亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

問答專欄Q & A COLUMN

你是如何學(xué)會正則表達(dá)式的?

eternalshalloweternalshallow 回答0 收藏1
收藏問題

3條回答

Chiclaim

Chiclaim

回答于2022-06-28 14:08

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

事實上,正則表達(dá)式其實遠(yuǎn)沒有第一眼看上去那么復(fù)雜,理解了下面幾個問題,學(xué)會正則表達(dá)式并不困難。


1.正則表達(dá)式是什么?


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

與其他程序設(shè)計語言一樣,正則表達(dá)式語言也有必須要學(xué)習(xí)的特殊語法和指令。但正則表達(dá)式語言并不是一種完備的程序設(shè)計語言,更準(zhǔn)確地說,正則表達(dá)式語言是內(nèi)置于其他語言或軟件產(chǎn)品里的“迷你”語言。正則表達(dá)式既不是可以直接運(yùn)行的應(yīng)用程序,也不是可以從哪里購買或下載下來的軟件。在絕大多數(shù)的軟件產(chǎn)品、編程語言、實用工具和開發(fā)環(huán)境里,正則表達(dá)式語言都已被實現(xiàn)。


2.正則表達(dá)式是用來干什么的?


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

請考慮以下幾個場景:

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

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

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


3.正則表達(dá)式怎么學(xué)?


和學(xué)習(xí)編程語言一樣,動手實踐是學(xué)習(xí)正則表達(dá)式的一種非常有效的方式。通過分析下面幾個小案例,你會發(fā)現(xiàn)正則表達(dá)式其實很簡單:

  • 搜索單詞car:

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

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

  • 匹配URL

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

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

  • 把電子郵件地址轉(zhuǎn)換為可點(diǎn)擊的鏈接:

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

絕大多數(shù)應(yīng)用程序的“搜索和替換”選項都可以實現(xiàn)這種替換操作,但使用正則表達(dá)式來完成這個任務(wù)將簡單得讓人難以置信。

以上幾個案例的原理分析和運(yùn)行代碼分別出自這本《正則表達(dá)式必知必會(修訂版)》以及配套網(wǎng)頁BEN FORTA。

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

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

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


歡迎關(guān)注@人民郵電出版社 頭條號,在這里發(fā)現(xiàn)更多優(yōu)質(zhì)圖書與學(xué)習(xí)資源。

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

Chaz

回答于2022-06-28 14:08

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

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

caikeal

回答于2022-06-28 14:08

應(yīng)該是通過理論性的學(xué)習(xí)加上實踐的感悟和總結(jié)而得,掌握辨清事非,對與錯,白與黑的能力,在表達(dá)時因人因事就會由感而發(fā)。

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

最新活動

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

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<