#content-region{background-image:url(http://p.blog.csdn.net/images/p_blog_csdn_net/rcom10002/EntryImages/20081027/watermark.gif);}#content-regionh3{border:1pxdotted#333333;background-color:#f9f9f9;padding:10px;font-size:24p" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

簡單入門正則表達式 - 第四章 單字符的匹配

系統 1952 0
<style> #content-region { background-image: url(http://p.blog.csdn.net/images/p_blog_csdn_net/rcom10002/EntryImages/20081027/watermark.gif); } #content-region h3 { border: 1px dotted #333333; background-color: #f9f9f9; padding: 10px; font-size: 24px; } #content-region p { font-family: "宋體", "仿宋"; font-size: 16px; line-height: 28px; text-decoration: none; text-indent: 32px; } #content-region .regex-pattern { font-style: oblique; font-family: "Courier New", Courier, monospace; background-color: #FFCCCC; border-top-style: solid; border-right-style: none; border-bottom-style: solid; border-left-style: none; border-top-color: #FF0000; border-bottom-color: #FF0000; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-right-color: #FF0000; border-left-color: #FF0000; padding: 0px 5px 0px 5px; } #content-region .regex-result { font-family: "Courier New", Courier, monospace; background-color: #A4FFE1; border-top-style: solid; border-right-style: none; border-bottom-style: solid; border-left-style: none; border-top-color: #339966; border-bottom-color: #339966; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-right-color: #339966; border-left-color: #339966; padding: 0px 5px 0px 5px; } #content-region blockquote { padding: 10px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dotted; border-right-style: dotted; border-bottom-style: dotted; border-left-style: dotted; width: auto; } #content-region img { border: 1px dotted #000000; padding: 16px; background-color: #f9f9f9; margin-top: 16px; margin-right: 16px; margin-bottom: 16px; margin-left: 64px; } #content-region code { white-space: pre; } </style>

一、單一字符的匹配

正則表達式中,最簡單的匹配就是單字符匹配了,這就像我們利用文本工具在文檔中查找一個字符一樣簡單。下面我們使用 EmEditor 來做個小實驗,在字符串“Regular Expression”中查找字符“e”。

簡單入門正則表達式 - 第四章 單字符的匹配

Ctrl+F 打開查找對話框,然后在“查找”框內鍵入字符“s”,并選用“匹配大小寫”和“使用正則表達式”模式,然后進行查找操作。從上圖的效果來看,同時有兩個“s”被匹配到了,但實際上這是執行了兩次匹配操作的結果,每次操作只匹配了一個字符“s”,操作順序是自左向右。讓我們再嘗試使用 Expresso 就能看出其中的奧秘,如下圖所示:

簡單入門正則表達式 - 第四章 單字符的匹配

在“Regular Expression”的選項卡下輸入“s”,“Sample Input Data”區域中輸入字符串“Regular Expression”,在單擊“Run Match”按鈕就能看到匹配結果。在上圖的右下角出現了兩個“s”,這是發生了兩次匹配操作,每次都有一個結果的緣故。

二、任意字符的匹配

當我們使用計算機時,經常需要打開和保存文件,這就免不了要與打開/保存對話框打交道,其中涉及到的文件類型都采用 * 點擴展名這種形式。比如說 HTML 文件,它所對應的文件類型就是 *.html 或 *.htm,星號就是一個通配符,表示與任意字符匹配,而在正則表達式中,也有這么一個通配符“.”,它可以與任意單字符相匹配,但通常不包括換行符。

接著上面的例子,我們把正則表達式樣式修改為 p.e.s ,這時的通配符“.”就分別與目標字符串的“r”和“s”相匹配,結果為“Regular Ex press ion”。

簡單入門正則表達式 - 第四章 單字符的匹配

三、匹配可選字符

在匹配目標字符串時,有時候可能會有些特殊需求,比方說我們要對詞組“Regular Expression”或者“Regular Expressions”進行匹配,無論哪種形式的詞組,我們都想能夠成功匹配。這時,單詞“Expression”后面的“s”就是可選的,在正則表達式中,問號表示它所指定的樣式出現的次數為零次或一次,所以,我們可以編寫正則表達式 Regular Expressions? 來進行匹配。

簡單入門正則表達式 - 第四章 單字符的匹配

四、特殊字符的處理

到目前為止,常規字符我們都可以成功地進行匹配,但是,還有一種情況就是像問號這樣在正則表達式中含有特殊意義的字符,對于這些字符來說,我們是無法直接利用它們進行匹配操作,那該如何對這些符進行轉義呢?跟許多程序語言一樣,正則表達式也提供了一個轉義的處理機制,我們可以使用轉義操作符反斜桿“/”。所以,如果我們想匹配問號和點,使用“/?”和“/.”就可以。同樣,對于轉義符“/”來說,它對自身也可以實現轉義功能,連續的兩個“/”代表了一個字符“/”。

修改上面的正則表達式為 Regular Expression/? ,它就能與字符串“Regular Expression?”相匹配了。在編寫正則表達式時,如果碰到了要匹配特殊字符的情況,那就一定要使用轉義操作。

簡單入門正則表達式 - 第四章 單字符的匹配

五、“*”與“+”

同“?”和“.”一樣,“*”和“+”也是具有特殊含義的字符,它們的作用是讓某個指定了的正則表達式樣式進行多次重復匹配。“*”的重復次數是從零開始的,規定其前導內容必須在目標字符串中出現零次或更多次;而“+”所對應的重復次數是從一開始的,規定其前導內容必須在目標字符串中出現一次或更多次。它們的重復次數都沒有上限值限制,也就是說它們的前導內容可以在目標字符串中不斷地重復出現。

正則表達式 ABC9* 表示一個以“ABC”開頭,后面為零個或多個連續“9”的字符串。這樣,它就能與字符串“ABC”、“ABC9”、“ABC99”和“ABC999”等內容相匹配了。

我們先來分析一下對字符串“ABC”的匹配,當正則表達式引擎對 ABC 匹配結束后,下一個參與匹配的字符就應該是“9”,但根據“*”的零次匹配原則,“9”是可以不出現的,所以,字符串“ABC”就成功地被匹配了。

再來看一下字符串“ABC999”,對字符“C”的匹配結束后,碰到的下一個字符就是“9”,成功匹配之后,繼續下一個字符,一直到最后一個字符為止,字符“9”出現的次數與“*”的多次匹配原則保持一致,所以字符串“ABC999”也能夠被成功匹配。

簡單入門正則表達式 - 第四章 單字符的匹配

六、花括號的使用

上面介紹了如何讓我們的匹配內容進行無限次的循環匹配,現在,我們學習一下怎么樣精確地控制循環匹配次數。正則表達式提供了一種使用花括號的方法控制循環匹配次數,語法形式有{n}、{n,}、{m,n}三種,其中 m 和 n 都是非負整數,且 m 的值小于 n值。

{n} 代表了被指定的匹配樣式必須在目標對象中重復出現 n 次;{n,}表示被指定的匹配樣式在目標對象中至少要重復出現 n 次,但無上限值限制;{m,n}指定了循環次數的范圍,至少要重復出現 m 次,至多重復出現 n 次,如果 m 值比 n 大,{m, n}的作用就相當于{m, m}。

現在,我們思考一個問題,“*”和“+”同樣能夠對重復匹配的次數做出限定,那么,如何用花括號形式表示呢?由于“*”表示指定的匹配樣式要重復出現 0 或多次,所以,我們可以先用{0}滿足重復出現 0 次的要求。但是如又何滿能夠足重復多次的要求呢,由于最終重復出現的次數是不固定的,我們就不能采用{m,n}這種形式,現在也只有采用最后一種形式{n,},“*”對應的花括號表現形式為{0,}。同理可推“+”對應的花括號表現形式為{1,},相對于用于可選匹配的“?”來說,用{0,1}來替換即可。

七、貪婪模式與懶惰模式

當我們使用含有次數限制的匹配語法時,常常會碰到正則表達式中的貪婪式與懶惰式的概念。那它們到底是什么意思呢?先看一下下面兩種對HTML標記進行匹配的例子,構造正則表達式 <.+> 來匹配字符串“<a>W3C A to Z</a>”,如下圖所示:

簡單入門正則表達式 - 第四章 單字符的匹配

為什么 <.+> 并沒有像我們預想的那樣匹配每一個HTML標記,而是一次性“吃掉”了所有的內容呢?這就是貪婪的匹配模式!讓我們分析一下正則表達式引擎的匹配機制,就會明白其中的道理了。首先要匹配的字符是“<”(匹配過程01),這個一點問題也沒有,然后輪到通配符“.”上場了,因為它后面緊跟著一個“+”,這就能讓它毫無顧忌的一個勁兒匹配下去,當匹配到字符串“<a>W3C A to Z</a>”最后一個字符“>”時,引擎發現無法找到相匹配的字符串,就嘗試著回退,把最后一次機會讓給“>”。結果當然是匹滿足條件的了,這就是為什么匹配結果是整個目標字符串而不是“<a>”和“</a>”。

匹配過程01 => <
匹配過程02 => <a>W3C A to Z</a>
匹配過程03 => <a>W3C A to Z</a>backtrack
匹配過程04 => <a>W3C A to Z</a
匹配過程05 => <a>W3C A to Z</a>
匹配過程06 => Match found

接下來,我們再分析一下采用懶惰模式的正則表達式 <.+?> ,貪婪模式與懶惰模式的語法區別在于重復限定修飾符的后面是否有問號,有的話就是懶惰模式,否則就是貪婪模式。

簡單入門正則表達式 - 第四章 單字符的匹配

懶惰模式下匹配的結果有兩個,“<a>”和“</a>”。對于前者的匹配過程是,首先匹配首字符“<”;然后再將“.”與“a”相匹配,這時“.”已經滿足了“+”的匹配次數至少要達到一次的要求,由于懶惰模式的緣故,“+”只要能滿足匹配條件就不會繼續執行下去;接下來要參與匹配的字符就是“>”,這時恰好滿足整個正則表達式的要求。對于后者來說要稍微復雜一點,當第二步“.”與“/”匹配后,第三步就要直接用“>”進行匹配,但“>”并不能與“a”相匹配,所以只能放棄,繼續由“.”再次擔任匹配任務;與“a”匹配完畢后,重新嘗試用“>”進行匹配操作,這次匹配成功并且目標字符串再沒有可以參與匹配操作的字符串,整個匹配過程順利結束,結果就是“</a>”。

<
<a
<a>
Match found
<
</
</backtrack
</a
</a>
Match found

不光是“*”和“+”有貪婪與懶惰兩種模式,花括號語法同樣存在相同的情況。如果用正則表達式 (as){3, 4} 來匹配字符串“asasasasas”,結果就是“ asasasas as”,有四組“as”被匹配;要是換成 (as){3,4}? ,結果就是“ asasas asas”,有三組“as”被匹配。

<!-- InstanceEndEditable -->

簡單入門正則表達式 - 第四章 單字符的匹配


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕免费在线观看 | 国产69久久久欧美黑人A片 | 一级毛片免费电影 | 久久伊人亚洲 | 国产欧美精品一区二区 | 欧美精品一级 | 蜜臀影院 | 波多野结衣中文字幕视频 | 久久国产这里只精品免费 | 91文字幕巨乱亚洲香蕉 | 天天天天天天天操 | 国产精品久久久久不卡 | 好吊在线 | 久久久久欧美激情 | 久久亚洲春色中文字幕久久 | 国产精品久久久久久中文字 | 君岛美绪一区二区三区在线视频 | 日韩免费视频观看 | 懂色一区二区三区免费观看 | 狠狠狠狠狠狠 | 欧美一级二级三级视频 | 日韩免费黄色片 | 亚洲天天做日日做天天看2018 | 国产精品福利在线观看秒播 | 国产精品毛片无码 | 一本一本久久α久久精品66 | 国产成人福利精品视频 | 国产精品久久嫩一区二区免费 | 成人性视频免费网站 | 狠狠草视频 | 99热这里只有免费国产精品 | 欧美午夜影院 | 国产精品系列在线 | 亚洲射吧 | 99热久久这里只有精品首页 | 九九热视频在线观看 | 成人理论 | 日日夜夜爱 | 欧美综合成人 | 9999久久| 日本中文在线观看 |