正則表達式

正則表達式

\n\n\n

【5】正則表達式應用——刪除空行

啟動EditPlus未状,打開待處理的文本類型文件俯画。

①、選擇“查找”菜單的“替換”命令司草,彈出文本替換對話框艰垂。選中“正則表達式”復選框,表明我們要在查找埋虹、替換中使用正則表達式猜憎。然后,選中“替換范圍”中的“當前文件”搔课,表明對當前文件操作胰柑。

②、單擊“查找內容”組合框右側的按鈕爬泥,出現(xiàn)下拉菜單柬讨。

③、下面的操作添加正則表達式袍啡,該表達式代表待查找的空行姐浮。(技巧提示:空行僅包括空格符制表符葬馋、回車符卖鲤,且必須以這三個符號之一作為一行的開頭,并且以回車符結尾畴嘶,查找空行的關鍵是構造代表空行的正則表達式)蛋逾。

直接在"查找"中輸入正則表達式“^[ \t]*\n”,注意\t前有空格符窗悯。

(1)選擇“從行首開始匹配”区匣,“查找內容”組合框中出現(xiàn)字符“^”,表示待查找字符串必須出文本中一行的行首蒋院。

(2)選擇“字符在范圍中”亏钩,那么在“^”后會增加一對括號“[]”,當前插入點在括號中欺旧。括號在正則表達式中表示姑丑,文本中的字符匹配括號中任意一個字符即符合查找條件。

(3)按一下空格鍵辞友,添加空格符栅哀≌鸢梗空格符是空行的一個組成成分。

(4)選擇“制表符”留拾,添加代表制表符的“\t”戳晌。

(5)移動光標,將當前插入點移到“]”之后痴柔,然后選擇“匹配 0 次或更多”沦偎,該操作會添加星號字符“*”。星號表示咳蔚,其前面的括號“[]”內的空格符或制表符豪嚎,在一行中出現(xiàn)0個或多個。

(6)選擇“換行符”屹篓,插入“\n”,表示回車符匙奴。

④堆巧、“替換為”組合框保持空,表示刪除查找到的內容泼菌。單擊“替換”按鈕逐個行刪除空行谍肤,或單擊“全部替換”按鈕刪除全部空行(注意:EditPlus有時存在“全部替換”不能一次性完全刪除空行的問題,可能是程序BUG哗伯,需要多按幾次按鈕)荒揣。

【6】 正則表達式應用——實例應用

1.驗證用戶名和密碼:("^[a-zA-Z]\w{5,15}$")正確格式:"[A-Z][a-z]_[0-9]"組成,并且第一個字必須為字母6~16位;

2.驗證電話號碼:("^(\\d{3,4}-)\\d{7,8}$")正確格式:xxx/xxxx-xxxxxxx/xxxxxxxx焊刹;

3.驗證手機號碼:"^1[3|4|5|7|8][0-9]\\d{8}$"系任;

4.驗證身份證號(15位或18位數(shù)字):"\\d{14}[[0-9],0-9xX]";

5.驗證Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")虐块;

6.只能輸入由數(shù)字和26個英文字母組成的字符串:("^[A-Za-z0-9]+$") ;

7.整數(shù)或者小數(shù):^[0-9]+([.][0-9]+){0,1}$

8.只能輸入數(shù)字:"^[0-9]*$"俩滥。

9.只能輸入n位的數(shù)字:"^\d{n}$"。

10.只能輸入至少n位的數(shù)字:"^\d{n,}$"贺奠。

11.只能輸入m~n位的數(shù)字:"^\d{m,n}$"霜旧。

12.只能輸入零和非零開頭的數(shù)字:"^(0|[1-9][0-9]*)$"。

13.只能輸入有兩位小數(shù)的正實數(shù):"^[0-9]+(\.[0-9]{2})?$"儡率。

14.只能輸入有1~3位小數(shù)的正實數(shù):"^[0-9]+(\.[0-9]{1,3})?$"挂据。

15.只能輸入非零的正整數(shù):"^\+?[1-9][0-9]*$"。

16.只能輸入非零的負整數(shù):"^\-[1-9][0-9]*$"儿普。

17.只能輸入長度為3的字符:"^.{3}$"崎逃。

18.只能輸入由26個英文字母組成的字符串:"^[A-Za-z]+$"。

19.只能輸入由26個大寫英文字母組成的字符串:"^[A-Z]+$"眉孩。

20.只能輸入由26個小寫英文字母組成的字符串:"^[a-z]+$"婚脱。

21.驗證是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"。

22.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"。

23.驗證URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"障贸。

24.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"10"~"12"错森。

25.驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"篮洁、"10"~"29"和“30”~“31”涩维。

26.獲取日期正則表達式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?

評注:可用來匹配大多數(shù)年月日信息。

27.匹配雙字節(jié)字符(包括漢字在內):[^\x00-\xff]

評注:可以用來計算字符串的長度(一個雙字節(jié)字符長度計2袁波,ASCII字符計1)

28.匹配空白行的正則表達式:\n\s*\r

評注:可以用來刪除空白行

29.匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?|<.*? />

評注:網上流傳的版本太糟糕瓦阐,上面這個也僅僅能匹配部分,對于復雜的嵌套標記依舊無能為力

30.匹配首尾空白字符的正則表達式:^\s*|\s*$

評注:可以用來刪除行首行尾的空白字符(包括空格篷牌、制表符睡蟋、換頁符等等),非常有用的表達式

31.匹配網址URL的正則表達式:[a-zA-z]+://[^\s]*

評注:網上流傳的版本功能很有限枷颊,上面這個基本可以滿足需求

32.匹配帳號是否合法(字母開頭戳杀,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

評注:表單驗證時很實用

33.匹配騰訊QQ號:[1-9][0-9]{4,}

評注:騰訊QQ號從10 000 開始

34.匹配中國郵政編碼:[1-9]\\d{5}(?!\d)

評注:中國郵政編碼為6位數(shù)字

35.匹配ip地址:([1-9]{1,3}\.){3}[1-9]夭苗。

評注:提取ip地址時有用

36.匹配MAC地址:([A-Fa-f0-9]{2}\:){5}[A-Fa-f0-9]

Function IsRegu(Regu,s)

'正則表達式校驗

If Regu="" Then

Exit Function

End if

Dim Re,Sre

Set Re = New RegExp

Re.Pattern = Regu

Sre = Re.Test(s)

If Sre = True Then

IsRegu = True

Else

IsRegu = False

End If

End Function

tmp=" "

if (IsRegu("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",tmp )) =false then

msgbox "E-mail地址不合法 信卡!"

FieldCheck#N=false

不同的語言(如PHP和JAVA)、相同語言的不同類庫(如來自Sun的Java Regular Expression類庫跟Apache Jakarta的正則表達式類庫)間题造,用法會有所差別傍菇,在使用的時候,要注意這些差別界赔。

驗證URL

17.functionIsValidUrl(str){

varregu="^(https?://)"

+"?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?"

+"(([0-9]{1,3}\.){3}[0-9]{1,3}"

+"|"

+"([0-9a-z_!~*'()-]+\.)*"

+"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\."

+"[a-z]{2,6})"

+"(:[0-9]{1,4})?"

+"((/?)|"

+"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";

varre=newRegExp(regu);

if(!re.test(str)){

returnfalse;

}

returntrue;

}

參考:[3]

零寬斷言

編輯

用于查找在某些內容(但并不包括這些內容)之前或之后的東西丢习,也就是說它們像\b,^,$那樣用于指定一個位置,這個位置應該滿足一定的條件(即斷言)淮悼,因此它們也被稱為零寬斷言泛领。最好還是拿例子來說明吧:

(?=exp)也叫零寬度正預測先行斷言[4],它斷言自身出現(xiàn)的位置的后面能匹配表達式exp敛惊。比如\b\w+(?=ing\b)渊鞋,匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.時瞧挤,它會匹配sing和danc锡宋。

(?<=exp)也叫零寬度正回顧后發(fā)斷言[4],它斷言自身出現(xiàn)的位置的前面能匹配表達式exp特恬。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的后半部分(除了re以外的部分)执俩,例如在查找reading a book時,它匹配ading癌刽。

假如你想要給一個很長的數(shù)字中每三位間加一個逗號(當然是從右邊加起了)役首,你可以這樣查找需要在前面和里面添加逗號的部分:((?<=\D)\D{3})+\b尝丐,用它對xxxxxxxxxx進行查找時結果是xxxxxxxxx

下面這個例子同時使用了這兩種斷言:(?<=\s)\d+(?=\s)匹配以空白符間隔的數(shù)字(再次強調,不包括這些空白符)

斷言用來聲明一個應該為真的事實衡奥。正則表達式中只有當斷言為真時才會繼續(xù)進行匹配爹袁。

負向零寬

編輯

如果我們只是想要確保某個字符沒有出現(xiàn),但并不想去匹配它時怎么辦矮固?例如失息,如果我們想查找這樣的單詞--它里面出現(xiàn)了字母q,但是q后面跟的不是字母u,我們可以嘗試這樣:

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的單詞档址。但是如果多做測試(或者你思維足夠敏銳盹兢,直接就觀察出來了),你會發(fā)現(xiàn)守伸,如果q出現(xiàn)在單詞的結尾的話绎秒,像Iraq,Benq,這個表達式就會出錯尼摹。這是因為[^u]總要匹配一個字符见芹,所以如果q是單詞的最后一個字符的話,后面的[^u]將會匹配q后面的單詞分隔符(可能是空格窘问,或者是句號或其它的什么)辆童,后面的\w*\b將會匹配下一個單詞宜咒,于是\b\w*q[^u]\w*\b就能匹配整個Iraq fighting惠赫。負向零寬斷言能解決這樣的問題,因為它只匹配一個位置故黑,并不消費任何字符儿咱。,我們可以這樣來解決這個問題:\b\w*q(?!u)\w*\b场晶。

零寬度負預測先行斷言(?!exp)混埠,斷言此位置的后面不能匹配表達式exp。例如:\d{3}(?!\d)匹配三位數(shù)字诗轻,而且這三位數(shù)字的后面不能是數(shù)字钳宪;\b((?!abc)\w)+\b匹配不包含連續(xù)字符串abc的單詞。

同理扳炬,我們可以用(?

請詳細分析表達式(?<=<(\w+)>).*(?=<\/\1>)吏颖,這個表達式最能表現(xiàn)零寬斷言的真正用途。

一個更復雜的例子:(?<=<(\w+)>).*

(?=<\/\1>)匹配不包含屬性的簡單HTML標簽內里的內容恨樟。(?<=<(\w+)>)指定了這樣的前綴:被尖括號

括起來的單詞(比如可能是)半醉,然后是.*(任意的字符串),最后是一個后綴(?=<\/\1>)。注意后綴里的\/劝术,它用

到了前面提過的字符轉義缩多,將”/“轉義呆奕;\1則是一個反向引用,引用的正是捕獲的第一組衬吆,前面的(\w+)匹配的內容梁钾,這樣如果前綴實際上

的話,后綴就是了咆槽。整個表達式匹配的是之間的內容(再次提醒陈轿,不包括

前綴和后綴本身)。

啟示

編輯

(1) 心中時刻保持新穎想法秦忿,嘗試用各種新辦法來解決遇到的問題麦射。對于遇到的問題,在用常規(guī)的解決思路無法解決或不能很好解決的時候灯谣,可以大膽探索嘗試采用新的方法或思路來解決問題潜秋,說大點就是創(chuàng)新!沒有新思路估計今天的正則表達式還要等幾百年才能露現(xiàn)人間胎许。

(2) 善于學習和借鑒前人的經驗和成果峻呛,UNIX鼻祖Ken

Thompson是什么樣子的人?是被計算機界尊稱為“UNIX之父”的大師級別的人物辜窑,大師都在不斷思考從其它學科钩述、其它知識領域的工作成果,來改進自

己的工作或程序穆碎,事實也證明這樣做取得巨大結果和后來的深遠影響是事先誰也無法預估到的牙勘,我們在做一些事情或研究的時間,是否也考慮學習大師的優(yōu)秀習慣所禀?

(3) 學好數(shù)學方面、英語并保持對數(shù)學、英語的興趣色徘,數(shù)學也是人類幾千年積累的智慧結晶恭金,學習數(shù)學知識可以培養(yǎng)和訓練人的思維能力」硬撸看這篇文章的朋友横腿,我想很多都是計算機相關專業(yè)的朋友,至于數(shù)學和英語對于計算機學習和發(fā)展的重要性的道理斤寂,這里就不在多說耿焊,重在實踐加持之以恒!

(4)

養(yǎng)成獨立思考的習慣扬蕊。上學時候老師經常說人與動物的最大區(qū)別是人能思考搀别。拉美洲有句關于“思考”的諺語是,不會思考的人是白癡尾抑,不肯思考的人是懶漢歇父,不敢

思考的人是奴隸蒂培。我想大家和我一樣,既不愿做懶漢榜苫、奴隸护戳,更不愿做白癡。所以相信正則分享網的朋友們一定會選擇做一個“會思垂睬、肯思媳荒、敢思”的人。

(5) 當正則表達式和字符串函數(shù)都能解決問題時驹饺,一定要使用字符串函數(shù)宵统,這樣不容易出錯币叹,最重要的是字符串函數(shù)比正則表達式實現(xiàn)性能上要好得多兑燥。

教程

編輯

正則表達式教程chm完整版是一本詳細介紹了正則表達式的電子書教程泥彤,全書共分為8個小節(jié),詳細的講述了正則表達式的定義蝌借,各種操作符的運算優(yōu)先級昔瞧,全部符號解釋,正則表達式匹配規(guī)則菩佑,參考文獻以及相關實例等自晰,全書簡明扼要,能夠很好的幫助讀者們正確掌握學習好正則表達式稍坯,從而在軟件編程中得到更好發(fā)揮酬荞。[5]

\n\n\n

【5】正則表達式應用——刪除空行

啟動EditPlus,打開待處理的文本類型文件劣光。

①袜蚕、選擇“查找”菜單的“替換”命令糟把,彈出文本替換對話框绢涡。選中“正則表達式”復選框,表明我們要在查找遣疯、替換中使用正則表達式雄可。然后,選中“替換范圍”中的“當前文件”缠犀,表明對當前文件操作数苫。

②、單擊“查找內容”組合框右側的按鈕辨液,出現(xiàn)下拉菜單虐急。

③、下面的操作添加正則表達式滔迈,該表達式代表待查找的空行止吁。(技巧提示:空行僅包括空格符被辑、制表符、回車符敬惦,且必須以這三個符號之一作為一行的開頭盼理,并且以回車符結尾,查找空行的關鍵是構造代表空行的正則表達式)俄删。

直接在"查找"中輸入正則表達式“^[ \t]*\n”宏怔,注意\t前有空格符。

(1)選擇“從行首開始匹配”畴椰,“查找內容”組合框中出現(xiàn)字符“^”臊诊,表示待查找字符串必須出文本中一行的行首。

(2)選擇“字符在范圍中”斜脂,那么在“^”后會增加一對括號“[]”妨猩,當前插入點在括號中。括號在正則表達式中表示秽褒,文本中的字符匹配括號中任意一個字符即符合查找條件壶硅。

(3)按一下空格鍵,添加空格符销斟÷罚空格符是空行的一個組成成分。

(4)選擇“制表符”蚂踊,添加代表制表符的“\t”约谈。

(5)移動光標,將當前插入點移到“]”之后犁钟,然后選擇“匹配 0 次或更多”棱诱,該操作會添加星號字符“*”。星號表示涝动,其前面的括號“[]”內的空格符或制表符迈勋,在一行中出現(xiàn)0個或多個。

(6)選擇“換行符”醋粟,插入“\n”靡菇,表示回車符。

④米愿、“替換為”組合框保持空厦凤,表示刪除查找到的內容。單擊“替換”按鈕逐個行刪除空行育苟,或單擊“全部替換”按鈕刪除全部空行(注意:EditPlus有時存在“全部替換”不能一次性完全刪除空行的問題较鼓,可能是程序BUG,需要多按幾次按鈕)违柏。

【6】 正則表達式應用——實例應用

1.驗證用戶名和密碼:("^[a-zA-Z]\w{5,15}$")正確格式:"[A-Z][a-z]_[0-9]"組成,并且第一個字必須為字母6~16位博烂;

2.驗證電話號碼:("^(\\d{3,4}-)\\d{7,8}$")正確格式:xxx/xxxx-xxxxxxx/xxxxxxxx拓哺;

3.驗證手機號碼:"^1[3|4|5|7|8][0-9]\\d{8}$";

4.驗證身份證號(15位或18位數(shù)字):"\\d{14}[[0-9],0-9xX]"脖母;

5.驗證Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")士鸥;

6.只能輸入由數(shù)字和26個英文字母組成的字符串:("^[A-Za-z0-9]+$") ;

7.整數(shù)或者小數(shù):^[0-9]+([.][0-9]+){0,1}$

8.只能輸入數(shù)字:"^[0-9]*$"。

9.只能輸入n位的數(shù)字:"^\d{n}$"谆级。

10.只能輸入至少n位的數(shù)字:"^\d{n,}$"烤礁。

11.只能輸入m~n位的數(shù)字:"^\d{m,n}$"。

12.只能輸入零和非零開頭的數(shù)字:"^(0|[1-9][0-9]*)$"肥照。

13.只能輸入有兩位小數(shù)的正實數(shù):"^[0-9]+(\.[0-9]{2})?$"脚仔。

14.只能輸入有1~3位小數(shù)的正實數(shù):"^[0-9]+(\.[0-9]{1,3})?$"。

15.只能輸入非零的正整數(shù):"^\+?[1-9][0-9]*$"舆绎。

16.只能輸入非零的負整數(shù):"^\-[1-9][0-9]*$"鲤脏。

17.只能輸入長度為3的字符:"^.{3}$"。

18.只能輸入由26個英文字母組成的字符串:"^[A-Za-z]+$"吕朵。

19.只能輸入由26個大寫英文字母組成的字符串:"^[A-Z]+$"猎醇。

20.只能輸入由26個小寫英文字母組成的字符串:"^[a-z]+$"。

21.驗證是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"努溃。

22.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"硫嘶。

23.驗證URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

24.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"10"~"12"梧税。

25.驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為沦疾;"01"~"09"、"10"~"29"和“30”~“31”第队。

26.獲取日期正則表達式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?

評注:可用來匹配大多數(shù)年月日信息哮塞。

27.匹配雙字節(jié)字符(包括漢字在內):[^\x00-\xff]

評注:可以用來計算字符串的長度(一個雙字節(jié)字符長度計2,ASCII字符計1)

28.匹配空白行的正則表達式:\n\s*\r

評注:可以用來刪除空白行

29.匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?|<.*? />

評注:網上流傳的版本太糟糕凳谦,上面這個也僅僅能匹配部分忆畅,對于復雜的嵌套標記依舊無能為力

30.匹配首尾空白字符的正則表達式:^\s*|\s*$

評注:可以用來刪除行首行尾的空白字符(包括空格、制表符晾蜘、換頁符等等)邻眷,非常有用的表達式

31.匹配網址URL的正則表達式:[a-zA-z]+://[^\s]*

評注:網上流傳的版本功能很有限眠屎,上面這個基本可以滿足需求

32.匹配帳號是否合法(字母開頭剔交,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

評注:表單驗證時很實用

33.匹配騰訊QQ號:[1-9][0-9]{4,}

評注:騰訊QQ號從10 000 開始

34.匹配中國郵政編碼:[1-9]\\d{5}(?!\d)

評注:中國郵政編碼為6位數(shù)字

35.匹配ip地址:([1-9]{1,3}\.){3}[1-9]改衩。

評注:提取ip地址時有用

36.匹配MAC地址:([A-Fa-f0-9]{2}\:){5}[A-Fa-f0-9]

Function IsRegu(Regu,s)

'正則表達式校驗

If Regu="" Then

Exit Function

End if

Dim Re,Sre

Set Re = New RegExp

Re.Pattern = Regu

Sre = Re.Test(s)

If Sre = True Then

IsRegu = True

Else

IsRegu = False

End If

End Function

tmp=" "

if (IsRegu("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",tmp )) =false then

msgbox "E-mail地址不合法 岖常!"

FieldCheck#N=false

不同的語言(如PHP和JAVA)、相同語言的不同類庫(如來自Sun的Java Regular Expression類庫跟Apache Jakarta的正則表達式類庫)間葫督,用法會有所差別竭鞍,在使用的時候板惑,要注意這些差別。

驗證URL

17.functionIsValidUrl(str){

varregu="^(https?://)"

+"?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?"

+"(([0-9]{1,3}\.){3}[0-9]{1,3}"

+"|"

+"([0-9a-z_!~*'()-]+\.)*"

+"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\."

+"[a-z]{2,6})"

+"(:[0-9]{1,4})?"

+"((/?)|"

+"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";

varre=newRegExp(regu);

if(!re.test(str)){

returnfalse;

}

returntrue;

}

參考:[3]

零寬斷言

編輯

用于查找在某些內容(但并不包括這些內容)之前或之后的東西偎快,也就是說它們像\b,^,$那樣用于指定一個位置冯乘,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言晒夹。最好還是拿例子來說明吧:

(?=exp)也叫零寬度正預測先行斷言[4]裆馒,它斷言自身出現(xiàn)的位置的后面能匹配表達式exp。比如\b\w+(?=ing\b)丐怯,匹配以ing結尾的單詞的前面部分(除了ing以外的部分)喷好,如查找I'm singing while you're dancing.時,它會匹配sing和danc读跷。

(?<=exp)也叫零寬度正回顧后發(fā)斷言[4]梗搅,它斷言自身出現(xiàn)的位置的前面能匹配表達式exp。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的后半部分(除了re以外的部分)效览,例如在查找reading a book時无切,它匹配ading。

假如你想要給一個很長的數(shù)字中每三位間加一個逗號(當然是從右邊加起了)丐枉,你可以這樣查找需要在前面和里面添加逗號的部分:((?<=\D)\D{3})+\b订雾,用它對xxxxxxxxxx進行查找時結果是xxxxxxxxx

下面這個例子同時使用了這兩種斷言:(?<=\s)\d+(?=\s)匹配以空白符間隔的數(shù)字(再次強調,不包括這些空白符)

斷言用來聲明一個應該為真的事實矛洞。正則表達式中只有當斷言為真時才會繼續(xù)進行匹配洼哎。

負向零寬

編輯

如果我們只是想要確保某個字符沒有出現(xiàn),但并不想去匹配它時怎么辦沼本?例如噩峦,如果我們想查找這樣的單詞--它里面出現(xiàn)了字母q,但是q后面跟的不是字母u,我們可以嘗試這樣:

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的單詞抽兆。但是如果多做測試(或者你思維足夠敏銳识补,直接就觀察出來了),你會發(fā)現(xiàn)辫红,如果q出現(xiàn)在單詞的結尾的話凭涂,像Iraq,Benq,這個表達式就會出錯贴妻。這是因為[^u]總要匹配一個字符切油,所以如果q是單詞的最后一個字符的話,后面的[^u]將會匹配q后面的單詞分隔符(可能是空格名惩,或者是句號或其它的什么)澎胡,后面的\w*\b將會匹配下一個單詞,于是\b\w*q[^u]\w*\b就能匹配整個Iraq fighting。負向零寬斷言能解決這樣的問題攻谁,因為它只匹配一個位置稚伍,并不消費任何字符。戚宦,我們可以這樣來解決這個問題:\b\w*q(?!u)\w*\b个曙。

零寬度負預測先行斷言(?!exp),斷言此位置的后面不能匹配表達式exp受楼。例如:\d{3}(?!\d)匹配三位數(shù)字困檩,而且這三位數(shù)字的后面不能是數(shù)字;\b((?!abc)\w)+\b匹配不包含連續(xù)字符串abc的單詞那槽。

同理悼沿,我們可以用(?

請詳細分析表達式(?<=<(\w+)>).*(?=<\/\1>),這個表達式最能表現(xiàn)零寬斷言的真正用途骚灸。

一個更復雜的例子:(?<=<(\w+)>).*

(?=<\/\1>)匹配不包含屬性的簡單HTML標簽內里的內容糟趾。(?<=<(\w+)>)指定了這樣的前綴:被尖括號

括起來的單詞(比如可能是),然后是.*(任意的字符串),最后是一個后綴(?=<\/\1>)甚牲。注意后綴里的\/义郑,它用

到了前面提過的字符轉義,將”/“轉義丈钙;\1則是一個反向引用非驮,引用的正是捕獲的第一組,前面的(\w+)匹配的內容雏赦,這樣如果前綴實際上

的話劫笙,后綴就是了。整個表達式匹配的是之間的內容(再次提醒星岗,不包括

前綴和后綴本身)填大。

啟示

編輯

(1) 心中時刻保持新穎想法,嘗試用各種新辦法來解決遇到的問題俏橘。對于遇到的問題允华,在用常規(guī)的解決思路無法解決或不能很好解決的時候,可以大膽探索嘗試采用新的方法或思路來解決問題寥掐,說大點就是創(chuàng)新靴寂!沒有新思路估計今天的正則表達式還要等幾百年才能露現(xiàn)人間。

(2) 善于學習和借鑒前人的經驗和成果召耘,UNIX鼻祖Ken

Thompson是什么樣子的人百炬?是被計算機界尊稱為“UNIX之父”的大師級別的人物,大師都在不斷思考從其它學科怎茫、其它知識領域的工作成果收壕,來改進自

己的工作或程序妓灌,事實也證明這樣做取得巨大結果和后來的深遠影響是事先誰也無法預估到的轨蛤,我們在做一些事情或研究的時間蜜宪,是否也考慮學習大師的優(yōu)秀習慣?

(3) 學好數(shù)學祥山、英語并保持對數(shù)學圃验、英語的興趣,數(shù)學也是人類幾千年積累的智慧結晶缝呕,學習數(shù)學知識可以培養(yǎng)和訓練人的思維能力澳窑。看這篇文章的朋友供常,我想很多都是計算機相關專業(yè)的朋友摊聋,至于數(shù)學和英語對于計算機學習和發(fā)展的重要性的道理,這里就不在多說栈暇,重在實踐加持之以恒!

(4)

養(yǎng)成獨立思考的習慣源祈。上學時候老師經常說人與動物的最大區(qū)別是人能思考。拉美洲有句關于“思考”的諺語是手销,不會思考的人是白癡,不肯思考的人是懶漢图张,不敢

思考的人是奴隸锋拖。我想大家和我一樣祸轮,既不愿做懶漢、奴隸倔撞,更不愿做白癡讲仰。所以相信正則分享網的朋友們一定會選擇做一個“會思、肯思痪蝇、敢思”的人。

(5) 當正則表達式和字符串函數(shù)都能解決問題時趁矾,一定要使用字符串函數(shù)给僵,這樣不容易出錯详拙,最重要的是字符串函數(shù)比正則表達式實現(xiàn)性能上要好得多蔓同。

教程

編輯

正則表達式教程chm完整版是一本詳細介紹了正則表達式的電子書教程,全書共分為8個小節(jié)弃揽,詳細的講述了正則表達式的定義则北,各種操作符的運算優(yōu)先級,全部符號解釋涌矢,正則表達式匹配規(guī)則快骗,參考文獻以及相關實例等,全書簡明扼要思灌,能夠很好的幫助讀者們正確掌握學習好正則表達式恭取,從而在軟件編程中得到更好發(fā)揮。[5]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蜈垮,一起剝皮案震驚了整個濱河市耗跛,隨后出現(xiàn)的幾起案子攒发,更是在濱河造成了極大的恐慌惠猿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜凄,死亡現(xiàn)場離奇詭異趾访,居然都是意外死亡,警方通過查閱死者的電腦和手機申鱼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捐友,“玉大人,你說我怎么就攤上這事撮慨〈嘀啵” “怎么了变隔?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵蟹倾,是天一觀的道長。 經常有香客問我肌厨,道長豁陆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任表鳍,我火速辦了婚禮譬圣,結果婚禮上雄坪,老公的妹妹穿的比我還像新娘。我一直安慰自己绳姨,他們只是感情好笨农,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布谒亦。 她就那樣靜靜地躺著空郊,像睡著了一般切揭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哼审,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天孕豹,我揣著相機與錄音励背,去河邊找鬼。 笑死址儒,一個胖子當著我的面吹牛衅疙,可吹牛的內容都是我干的。 我是一名探鬼主播喧伞,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼理朋,長吁一口氣:“原來是場噩夢啊……” “哼嗽上!你這毒婦竟也來了?” 一聲冷哼從身側響起兽愤,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浅萧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吩案,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帝簇,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年胧后,在試婚紗的時候發(fā)現(xiàn)自己被綠了抱环。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡眶痰,死狀恐怖陶夜,靈堂內的尸體忽然破棺而出条辟,到底是詐尸還是另有隱情宏胯,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布杭棵,位于F島的核電站氛赐,受9級特大地震影響,放射性物質發(fā)生泄漏滓侍。R本人自食惡果不足惜牲芋,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一缸浦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歹鱼,春花似錦卜高、人聲如沸秩霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赔癌,卻和暖如春澜沟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刊苍。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工濒析, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留号杏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓主经,卻偏偏與公主長得像庭惜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鉴腻,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容

  • 正則表達式到底是什么東西爽哎?字符是計算機軟件處理文字時最基本的單位器一,可能是字母,數(shù)字渺贤,標點符號,空格志鞍,換行符固棚,漢字等...
    獅子挽歌閱讀 2,147評論 0 9
  • 推薦幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,494評論 9 151
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發(fā)攻城獅閱讀 4,588評論 0 23
  • 注:本篇文章只為方便查看此洲,特此保留,如有冒犯娶桦,敬請諒解V埂!霎匈! 本文目標 30分鐘內讓你明白正則表達式是什么送爸,并對它...
    阿杰Alex閱讀 1,483評論 0 10
  • 自從決定加入月讀《傳習錄》袭厂,每日堅持靜心月讀球匕,感覺收獲頗豐,雖俗事太多亮曹,閱讀時間有限照卦,進步太慢,但是也享受到了...
    偶爾閑情閱讀 468評論 0 3