關於正規表示式

2021-09-22 19:58:03 字數 1893 閱讀 5708

開發工具與關鍵技術:visual studio 215 ,mvc
現在我們就來說說正規表示式。正規表示式又名為規則表示式,英文名為regular eepression.通常在書寫**時簡寫為regex、regexp或re.那麼正規表示式到底是用來幹嘛的呢!其實正規表示式通常被用來檢索、替換某些符合模組(規則)的文字。通俗理解就是正規表示式是用於進行文字匹配的工具。

最常見的\b是正規表示式規定的乙個特殊**,我們把它叫做元字元。單詞的開頭或結尾也就是單詞的分界處,它只能匹配乙個位置。

上面說的\b只是元字元中的乙個,下面我們來看常見的元字元:

** 說明

. 匹配除換行符以外的任意字元

\w 匹配數字或字母或下劃線或漢字

\s 匹配任意的空白符

\d 匹配數字

\b 匹配單詞的開始或結束

^ 匹配字串的開始

$ 匹配字串的結束

通過上面的元字元我們對正規表示式有了一定的了解。現在我們來看字元轉義,字面上理解就是對元字元的反義方法。比如你要查詢w,或者s就會出現問題來了。因為你沒法指定它們。這時我們就必須使用\來取消這些字元的特殊意義,因此,我們就要用到

\w和\s。當然查詢\本身也得用\。

下面我們來看限定符(重複):

** 說明

? 重複零次或一次

重複n次

重複n次或更多次

重複n到m次

說了這麼多我們來做一道題:如何才能匹配到字串a-g的大寫字元呢!

其實道理好簡單,我們只要用正規表示式來匹配即可。

答案為:[a-g]。

現在我們用正規表示式匹配幾種格式的**號碼:(020)66668888,或022-44556677

答案為:\(?0\d[)-]?\d.

下面是效果圖:

現在來看反義

** 說明

\w 匹配任意不是字母,數字,下劃線,漢字的字元

\s 匹配任意不是空白符的字元

\d 匹配任意非數字的字元

\b 匹配不是單詞開頭或結束的位置

[^x] 匹配除了x以外的任意字元

[^aeiou] 匹配除了aeiou這幾個字母以外的任意字元

以及零寬斷言分組語法:

** 說明

(?=exp) 匹配exp前面的位置

(?<=exp) 匹配exp後面的位置

(?!exp) 匹配後面跟的不是exp的位置

(?例子:img οnlοad=」autoresizeimage(200,200,this)」 src=」/document/title/temp/2018-12-10bc5.png」 >

匹配出: οnlοad=」autoresizeimage(200,200,this)」

答案為: onload.+(?=src)

現在要說的是貪婪與懶惰。請不要誤會哦,貪婪與懶惰在這裡不是指人類的某些行為習慣,而是指程式設計上的貪婪與懶惰含義。

貪婪:當正規表示式中包含能接受重複的限定符時,通常的行為是在使整個表示式能得到匹配的前提下,匹配到盡可能多的字元。

懶惰:有時候我們更需要懶惰匹配,也就是匹配盡可能少的字元。

如果將前面給出的限定符轉化為懶惰匹配模式,只要在它後面加上乙個問號即可。

懶惰限定符:

** 說明

*? 重複任意次,但盡可能少重複

+? 重複1次或更多次,但盡可能少重複

?? 重複0次或1次,但盡可能少重複

? 重複n到m次,但盡可能少重複

? 重複n次以上,但盡可能少重複

img οnlοad=」autoresizeimage(200,200,this)」 src=」/document/title/temp/2018-12-10bc5.png」 >

還是這一例子,正確匹配出的正規表示式為: onload.+?(?=src)

關於正規表示式

前言 regular expressions 正規表示式,以下用re稱呼 對小弟來說一直都是神密的地帶,看到一些網路上的大大,簡單用re就決解了某些文字的問題,小弟便興起了學一學re的想法,但小弟天生就比較懶一些,總希望看有沒有些快速學習的方式,於是小弟又請出google大神,借由祂的神力,小弟在網...

關於正規表示式

使用atl中的正規表示式總是會多多少少的出問題,比如 不能識別,一些其他字元不能識別等等,所以使用了greta解決了那個問題 int caddmaker regexmatch cstring strs,cstring regex,cstringarray result match results r...

關於 正規表示式

網路程式設計中正規表示式的使用 最近開發涉及到很多網路程式設計和解析方面的,使用到正規表示式,剛開始一看,我暈,亂碼啊,這個到底是神馬啊。比如說下面這個東西 qregexp rx s 1234567890 正規表示式的概念就不仔細介紹,網上很多,也很清晰。下面只是此人個人觀點,與我本人無關,如有錯漏...