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

成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

問(wèn)答專欄Q & A COLUMN

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

eternalshalloweternalshallow 回答0 收藏1
收藏問(wèn)題

3條回答

Chiclaim

Chiclaim

回答于2022-06-28 14:08

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

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


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


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

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


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


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

請(qǐng)考慮以下幾個(gè)場(chǎng)景:

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

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

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


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


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

  • 搜索單詞car:

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

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

  • 匹配URL

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

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

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

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

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

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

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

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

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


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

評(píng)論0 贊同0
  •  加載中...
Chaz

Chaz

回答于2022-06-28 14:08

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

評(píng)論0 贊同0
  •  加載中...
caikeal

caikeal

回答于2022-06-28 14:08

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

評(píng)論0 贊同0
  •  加載中...

相關(guān)問(wèn)題

最新活動(dòng)

您已邀請(qǐng)0人回答 查看邀請(qǐng)

我的邀請(qǐng)列表

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