正則表達式終極教程(游戲達人版看下面地址)_第1頁
正則表達式終極教程(游戲達人版看下面地址)_第2頁
正則表達式終極教程(游戲達人版看下面地址)_第3頁
正則表達式終極教程(游戲達人版看下面地址)_第4頁
正則表達式終極教程(游戲達人版看下面地址)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、中國人正則表達式終極教程學院通俗版 如果這個版本你覺得還很吃力,那請看游戲達人版用正則表達式的目的:搜索一個文本中有沒有滿足我們指定條件的字符串。例如:搜索上面這句話中有沒有“中有沒”這個字符串,這個很簡單是吧! 正則表達式就是:中有沒 這是正則的精確收索,中有沒 就是正則條件。 如果正則表達式是:正則|目的|滿足 其中“|”= “或者” 的意思 ,即搜索文本中有沒有這三個字符串。 但注意:用正則搜索文本的思路是,以正則表達式條件為依據(jù)在文本中從頭到尾搜 索一遍即完成。正則條件的使用順序是從左到右反復使用。如果在文本中搜索到符合 條件的字符串,那么接著在文本中搜索時就會跳過這個字符串。 舉例說

2、明:正則:山上|上山 文本:雞山上山雞多 搜索步驟: 1、山上 的 山 去匹配文本的 雞,不匹配 2、上山 的 上 去匹配文本的 雞,不匹配 3、山上 的 山 去匹配文本的 山,匹配 4、山上 的 上 去匹配文本的 上,匹配 <-山上匹配成功。 5、山上 的 山 去匹配文本的 山,匹配 <-注意這里跳過了已經(jīng)匹配的文本。 6、山上 的 上 去匹配文本的 雞,不匹配 7、上山 的 上 去匹配文本的 雞,不匹配 可看出 上山 在文本中沒機會匹配了。 。 從第7步中看出雖然文本 雞山上山雞多 中 山上 和 上山 都存在, 但由于 山上 的匹配成功,使得后面繼續(xù)搜索時跳過文本中的 山上,上

3、山 就沒有機會匹配成功了。注:綠色粗體字是為了幫助閱讀時斷句理解。正則之所以難學就是在描述上容易產(chǎn)生歧義。所以讀的時候注意斷句。如果你能看懂上面的,恭喜你,頒發(fā)給你正則學院:小學畢業(yè)證書想從文本中取出所有數(shù)字串嗎? 我們?nèi)祟惖拿枋龇椒ㄊ牵喝〕鑫谋局械乃袛?shù)字串。電腦要實現(xiàn)這個要求就得寫個函數(shù),專門取數(shù)字串,但如果又換一種要求,比如取字母串,那就又得寫個取字母串函數(shù),那這種要求多得去了,這函數(shù)不就沒完沒了了嗎 ?換一種更具體的特征描述法:以數(shù)字開頭,后面全是數(shù)字的字符串。 找所有數(shù)字串的正則是:“0-9+” 找所有字母串的正則是:“A-Za-z+” “條件”表示匹配括號內(nèi)的任意一個條件。如0-9

4、表示匹配數(shù)字0123456789中的一個數(shù)字,也可寫成0123456789,正則為了簡化就定義了范圍符號“-”,它前后的字符表示框住的"ASCII"碼區(qū)域。如下:數(shù)字字符 "ASCII"碼 0 48 1 49 8 56 9 57大寫字母字符 "ASCII"碼 A 65 B 66 Y 89 Z 90但注意“條件條件條件”只匹配一個字符。如A-Za-z只表示匹配大小寫字母中的中的一個字符。 “+”指定它前面的一個正則單元匹配一次后,繼續(xù)用這個正則單元重復匹配,直到不滿足正則單元條件為止,像0-9、A-Za-z都是正則的一個單元。 0-9+

5、就表示以數(shù)字開頭的數(shù)字串。 事實上正則收索文本是以字節(jié)為單位進行匹配收索的,真正匹配的是字符在電腦中的內(nèi)碼,英文就是按"ASCII"碼來匹配的,比如“0”的"ASCII"碼是48,“A”的"ASCII"碼是65。文本中"ASCII"碼除了可見的字符外還有些不可見的符號,比如:回車符、制表符等.。要匹配這些符號就可以用內(nèi)碼去匹配,內(nèi)碼用16進制來表示。"ASCII"碼表在百度上收索"ASCII" 就出來了。比如正則“x0D”就表示正則回車字符,其中“0D”就是回車符的內(nèi)碼,“x

6、”是正則定義的轉(zhuǎn)義符號,意思是把后兩個字符當作16進制的內(nèi)碼處理。如:將以下文本按行搜索出來。Hello,How are you?Hi,I am fine thank you. 注:這里標點符號用的全是英文的半角標點符號。正則:A-ZA-Za-z0-9,?. +x0d. A-Z表示以大寫字母開頭,這是正則的第一個單元。 A-Za-z0-9,?. 表示只要文本中字符是大小寫字母或數(shù)字或逗號或問號或句號或空格就匹配,注意右方括號前面有個空格,這是正則的第二單元。 其中“.”表示句號,“”是正則定義的轉(zhuǎn)義符號,因為“.”是正則的關(guān)鍵字,單獨使用時表示匹配任意任一一個字符,像 ? * + 等都是正則的

7、關(guān)鍵字,如果文本中有這些符號需要匹配,就在其前面加一個“”。如“?”就是匹配“?”號,這時“?”就不是正則的關(guān)鍵字了?!?” 表示將A-Za-z0-9,?. 這個正則單元重復匹配,直到不滿足條件為止。x0d.表示以回車和句號結(jié)尾,之所以要加入句號是因為文本尾部可能沒有回車符號,但必須是句號結(jié)尾。注意:表達式中不能有多余的字符(包括空格等不可視字符),否則就會將其一起當作匹配元素了,特別初學者容易忽視前后不能有空格。如:“A-ZA-Za-z0-9,?. +x0d. ”只能匹配以句號和空格結(jié)尾的行了。 “ A-ZA-Za-z0-9,?. +x0d.”只能匹配以空格開頭的行了。如果這段你也看懂了,恭

8、喜你,正則學院:中學畢業(yè)證書正則漢字串 精確漢字串匹配很簡單。 但如果要搜索文本中的所有漢字串該怎么正則呢?聰明的你一定想到了內(nèi)碼,漢字的內(nèi)碼在GB2312簡體中文編碼表中都是大于x79的(注意是16進制,10進制是127),為的是區(qū)別于英文"ASCII"碼,并且是用2字節(jié)一個漢字符。每個字節(jié)的編碼范圍都是xa1-xfe(10進制就是161-254)。具體可到網(wǎng)上查GB2312簡體中文編碼表。 那么對于2字節(jié)的漢字串: 正則 xa1-xfe+ 可搜索匹配的漢字串。正則 xa1-xfexa1-xfe 可匹配一個漢字,2字節(jié)一個漢字符。但現(xiàn)在很多正則程序模塊(能夠支持正則規(guī)則的

9、程序函數(shù)集合),已經(jīng)不再支持這種單字節(jié)匹配漢字的做法,而是將大于x79的文本數(shù)據(jù)單元必須以2字節(jié)為單位進行正則匹配,這樣做更智能了,避免了半邊漢字亂碼出現(xiàn)。那么像這種智能化的正則,我們該怎樣正則漢字串呢?不同的正則模塊就各不相同了,只有看看對應的正則用戶說明書。有的 比如:x00-xff 表示按照非單字節(jié)字符來匹配漢字,或說成按多字節(jié)匹配。方括號內(nèi)第一個字符為“”在原始的正則規(guī)定中,是定義方括號內(nèi)的內(nèi)容為排除模式,即將方括號內(nèi)的條件變?yōu)椴黄ヅ溥@些條件。本來 x00-xff 是無意義的,即不匹配任何字符,所以像這樣寫只能把它整體看為一個符號。(易語言正則不支持漢字匹)另外還可以用 u4e00-u

10、9fa5 來匹配漢字。(易語言正則不支持漢字匹)“u”與“x”意思相同,“x”是表示用 2位16進制數(shù)表示內(nèi)碼?!皍”是表示用 4位16進制數(shù)表示內(nèi)碼。 4e00-9fa5 是 unicode漢字編碼表 的漢字編碼范圍。要了解字符編碼就看看下面這篇百度文庫里的文章,我覺的寫得很好,一看就懂的個樣。unicode、utf-8、ansi的故事> 如果這段你也看懂了,恭喜你,正則學院:暑期培訓優(yōu)秀證書正則中的關(guān)鍵字關(guān)鍵字是原始正則定義的,全部是標點符號。如果要用其匹配文本必須在其前加“”。(正則因此變得神秘了,看起來就象外星文)1-“” 轉(zhuǎn)義號,如需匹配它就需在其前面再加個“”,即“”表示一個

11、斜杠。以下同理。2-“|” 其前后正則單元為 "或" 關(guān)系。在鍵盤上與“”是同一個按鍵。3-“.” 表示匹配任意任一一個字符,相當與x00-xff。4-“+”是至少匹配一個它前面的一個正則單元(1-無窮),直到條件不匹配為止。5-“*”是匹配任意多個它前面的一個正則單元(0-無窮),直到條件不匹配為止。但千萬注意:用易語言官方支持庫中的正則類來正則匹配時,*號前面的單元前必須要加一個限位單元,如:“0-90-9*”,但不能單獨只使用“0-9*”否則程序很有可能掛掉,這可能是因為正則會無限次的匹配0次這個邏輯,始終沒有字符被跳過,即在0次匹配邏輯上死循環(huán),經(jīng)試驗如果文本第一個

12、字符是數(shù)字,用“0-9*”去正則必死。用其他第三方的正則引擎就沒有這個問題,可以不加限位也可。 以下是易語言官方解釋: 能匹配空字符串的子匹配不要循環(huán)無限次。如果括號內(nèi)的子表達式中的每一部分都可以匹配 0 次,而這個括號整體又可以匹配無限次,匹配過程中可能死循環(huán)。雖然現(xiàn)在有些正則表達式引擎已經(jīng)通過辦法避免了這種情況出現(xiàn)死循環(huán)了,比如 .NET 的正則表達式,但是我們?nèi)匀粦摫M量避免出現(xiàn)這種情況。如果我們在寫表達式時遇到了死循環(huán),也可以從這一點入手,查找一下是否是本條所說的原因。6-“?”是只匹配它前面的正則單元 0 次或 1 次。注意:這個也有0次匹配陷阱。7-“n,m”匹配次數(shù)范圍定義括號。

13、 這個也可能有0次匹配陷阱。8-“”匹配文本的開始位置。 后面再說9-“$”匹配文本結(jié)尾位置。 后面再說A-“()”子表達式括號。 后面再說B-“”匹配括號內(nèi)的任意一個條件。相信前面6個和最后一個都看得懂。第7個“n,m”匹配次數(shù)定義括號。其實4、5、6都是7的特例:0-9* 相當于 0-90, 后個數(shù)字不寫表示無窮0-9+ 相當于 0-91, 0-9? 相當于 0-90,1 看出來了嗎?“n,m”就是參照前面的一個正則單元重復匹配時的重復次數(shù)范圍。逗號前是至少匹配多少個,逗號后是最多匹配多少個。如: 0-93,6 表示匹配的數(shù)字串至少要3個數(shù)字,但最長不超過6個。如:a12c 數(shù)字串少于3個

14、不能匹配 a1234567c 只匹配出“123456”,7不能匹配a123a12345a123456c 匹配出3個字符串還可以精確匹配次數(shù):0-93 表示只匹配有3個字符的數(shù)字字符串。如果這段你也看懂了,恭喜你,正則學院:高中畢業(yè)證書正則表達式的簡化和效率用正則搜索文本的思路是,以正則表達式條件為依據(jù)在文本中從頭到尾搜 索一遍即完成。正則條件的使用順序是從左到右反復使用。如果在文本中搜索到符合 條件的字符串,那么接著在文本中搜索時就會跳過這個字符串。 從上文中可以看出正則條件是被反復使用的,也就是說正則表達式在收索過程中要使用很多次,那么正則表達式越短或者說字符越少,效率就會成倍提高(這個我不

15、肯定,也有可能只是為了輸入方便。),所以正則為此定義了一些簡化符號。都是小寫字母,如下:n = 換行符 = x0Ar = 回車符 = x0Dt = 制表符 = x09v = 垂直制表符 = x0Be = ESC 符 = x1Bf= 分頁符d = 0-9w = A-Za-z0-9_ 匹配字母、數(shù)字、下劃線。s 匹配任何不可見,包括空格、制表符、分頁符等。cx 匹配由x指明的控制字符。例如, cM 匹配一個 Ctrl-M 或 回車符,Ctrl就是鍵盤 左下腳的那個鍵。x 的值必須為 A-Z 或 a-z 之一。縮短正則式是提高收索效率的一方面,另一方面還要考慮條件表達的范圍。比如 0-9的效率小于3

16、-8的效率,也就是在匹配時 3-8 比 0-9 用時短。當然能考慮的時候就盡量考慮,不好考慮的話還是放寬范圍為妙,免得出錯。正則的排除模式表達式前面的正則都是用“包含”的概念來表達正則,但有時我們希望用“排除”的概念來表達。比如:匹配不是數(shù)字的字符,即排除數(shù)字,正則為,0-9 匹配不是字母的字符,即排除字母,正則為,A-Za-z看出來了吧!就是在左方括號后加個“”,與鍵盤上的6同一個鍵。大多數(shù)時候我們叫他乘方符號。另外還有些精簡的表示法,都是大寫字母。 如下: D = 0-9 排除數(shù)字,就是不匹配數(shù)字 或者說 除數(shù)字之外的字符匹配。 W = A-Za-z0-9 排除大小寫字母和數(shù)字。 S 排除

17、不可見字符。正則的內(nèi)碼表達式xFF 紅字是2位十六進制內(nèi)碼,只能兩位,少于2位時,前面必須加0補齊,如x0A。 uFFFF 紅字是4位十六進制內(nèi)碼,只能四位,少于4位時,同上。如果這三段你也看懂了,恭喜你,正則學院:大學畢業(yè)證書 正則的特殊匹配:邊界匹配b 用它前面的正則單元去匹配,并且匹配的字符串在文本中后面是空格或者文本尾。 如: 文本“ABC DEC” 正則式“Cb” 結(jié)果是2個C 字符串,第一個C后是空格,第二C后面 是文本尾部 “C DECb” 結(jié)果就是“C DEC” ,“C DEC”是一個正則單元。 可以用其搜索單詞尾部。B 用它前面的正則單元去匹配,并且匹配的字符串在文本中后面不

18、是空格或者文本尾。 如: 文本“ABC DEC” 正則式 “A-Z+B” 結(jié)果是AB DE 2個字符串 “C DEB” 結(jié)果就是“C DE”“”用它后面的正則單元去匹配,并且匹配的字符串在文本中是文本頭或行首?!?”用它前面的正則單元去匹配,并且匹配的字符串在文本中是文本尾或行尾。 如: 文本:abcdefg abcdef abcde 正則式:“w+f$” 結(jié)果是“abcdef” 即第二行, 注:開啟多行匹配 正則式:“abc” 結(jié)果是“abc” 即第一行abc 注:開啟多行匹配 結(jié)果是3個“abc” 注:開啟多行匹配和全局匹配 多行和全局是“”,“$”這兩個正則關(guān)鍵字特有的選項開關(guān),必須在正

19、則函數(shù)命令中指定。為什么有這兩個選項呢? 我大概描述一下我的理解: 多行開關(guān)開啟,表示可以多行匹配,但兩個符號的作用都不能加持重復匹配符號,所以整個正則只能匹配一次。 全局開關(guān)開啟,表示可以重復匹配每一行,但兩個符號又只能匹配文本頭和尾,有矛盾在。 所以必須兩個都打開,才行。兩個選項都關(guān)閉: 只能匹配文本頭。 $ 只能匹配文件尾。 $ 正則必須完全與整個文本匹配,才能算匹配。 只打開多行選項: 只能匹配文本頭。 $ 只能匹配文本第一行尾。 $ 正則必須完全與文本中任一一行匹配,才能算匹配,最 多只能匹配一行。只打開全局選項: 只能匹配文本頭。 $ 只能匹配文本尾。 $ 正則必須完全包含文本第一

20、行所有字符,并且文本只能有一行, 行尾不能有回車符,才能算匹配。兩個選項都打開: 匹配所有的行首。 $ 匹配所有的行尾。$ 匹配所有的行,必須完全包含文本行所有字符,才能算匹配。以上的描述較難理解,只有多試幾次,對照上述結(jié)果仔細參詳。阿彌托福 我盡力了! 如果這段你也看懂了,恭喜你,正則學院:碩士畢業(yè)證書正則的“貪心模式”和“懶惰模式” 正則中“* + ? m,n”這類表示重復的符號,在匹配中是分兩種模式的,“貪心模式”就是我們一般正常理解的模式,只要匹配正則單元就盡可能多的去匹配?!皯卸枘J健迸c它相反就是盡可能少的去匹配,最少至0匹配。正則表示方法為:在“* + ? m,n”這些符號后再加一

21、個“?”如: 文本:0123456789 正則:0-93,6? 結(jié)果是“012”“345”“678” 按照最少3個字符取匹配。不加:0-93,6 結(jié)果是 “012345” “6789”按照最多6個字符取匹配。用途我是沒想到,這有啥用?可能是我還不知道到它的用途。反正正則是定義了它。正則存儲數(shù)據(jù)的秘密 前面說的都是正則匹配的字符串的方法,那么正則匹配出來的字符串存方在那里呢?雖然我們用正則的時候不必知道它們的存放位置,但如果能知道的話,用起來更放心些。事實上,正則并沒有把匹配的字符串從文本中復制出來,而是把匹配的起始位置及長度記錄了下來,當要提取正則出來的字符串時,再根據(jù)這些記錄到文本中去提取字

22、符串。這樣做的好處我想對于聰明的你,我就不必多說了吧!正則的子串當文本中需要正則的字符串不只一種,而是幾種,并且它們是按大類順序出現(xiàn)在文本中時如:上面綠色部分如果我們想從中分別提取網(wǎng)址、日期,就需要兩個正則變量來正則,或者一次全部提取,然后另行處理來分開,麻煩嗎?我認為麻煩。正則也考慮到了這種需求,所有它定義了子串這個功能。例如:如文本:“大家說 芙蓉=2姐 鳳姐=B妹 對嗎?” 正則:(u4e00-u9fa52)=(2Bu4e00-u9fa5)u4e00-u9fa5還記得吧!是匹配漢字,u4e00-u9fa52就是匹配2個漢字u4e00-u9fa52=2Bu4e00-u9fa5表示:2個漢字

23、開頭,接著是“=”,接著是“2”或者“B”,結(jié)尾是一個漢字的字符串。圓括號括起來就表示要提取其中的子串。那么正則出來就會有6個字符串?!败饺?2姐” “芙蓉” “2姐”“鳳姐=B妹” “鳳姐” “B妹”“芙蓉”和“2姐”就是“芙蓉=2姐”的子串?!傍P姐”和“B妹”就是“鳳姐=B妹”的子串。如果這三段你也看懂了,恭喜你,正則學院:博士畢業(yè)證書正則子串匹配結(jié)果的引用上面的子串如果你理解了,那么這段你看懂的幾率只有60%左右,如果你看懂了,恭喜我,因為我把它表達清楚了。你呢就進入叫獸初級階段。我們來看看下面的正則: 文本 AbA 正則 (A-Z)(a-z) 結(jié)果是3個字符串“Ab” 以及它的子串 “

24、A”“b”如果正則 (A-Z)(a-z)1 后面加了個正則子串匹配結(jié)果的引用 1,表示把第一個括號已經(jīng)匹配的字符串引用一次來匹配 ,則實際效果是(A-Z)(a-z)A。結(jié)果就變?yōu)椋?“AbA”以及它的子串 “A”“b”也可加括號(A-Z)(a-z)(1) 則實際效果是(A-Z)(a-z)(A)。結(jié)果就變?yōu)椋?“AbA”以及它的子串 “A”“b”“A” 同理如果 1 變成2 ,表示把第二個括號已經(jīng)匹配的字符串引用一次 。 注意:只能引用前面的不能引用后面的。千萬注意:引用的是前面匹配的結(jié)果來匹配,不是引用前面的正則單元條件來匹配。 比如: AbC (A-Z)(a-z)1的正則結(jié)果為空,因為第一個括號匹配的結(jié)果是A,與C不匹配,所有整個正則結(jié)果為空。正則的后假匹配 這段如果你能看懂,你就是中級叫獸。正則匹配有時我們?yōu)榱诵r炂ヅ涞恼_性,希望多匹配一些附近的字符,但結(jié)果中并不想要這些校驗用字符,在正則中我把這些校驗用字符的匹配叫假匹配。文本 AAAabc000cde* 要求只匹配數(shù)字前面的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論