久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      C#之正則表達(dá)式介紹

      本文整理C#正則表達(dá)式的元字符,正則表達(dá)式是由字符構(gòu)成的表達(dá)式,每個(gè)字符代表一個(gè)規(guī)則,表達(dá)式中的字符分為兩種類型:普通字符和元字符。普通字符是指字面含義不變的字符,按照完全匹配的方式匹配文本,而元字符具有特殊的含義,代表一類字符。

      C#之正則表達(dá)式介紹

      把文本看作是字符流,每個(gè)字符放在一個(gè)位置上,例如,正則表達(dá)式 “Roomddd”,前面四個(gè)字符Room是普通字符,后面的字符是轉(zhuǎn)義字符,和后面的字符d組成一個(gè)元字符d,表示該位置上有任意一個(gè)數(shù)字。

      C#之正則表達(dá)式介紹

      用正則表達(dá)式的語言來描述是:正則表達(dá)式 “Roomddd”共捕獲7個(gè)字符,表示“以Room開頭、以三個(gè)數(shù)字結(jié)尾”的一類字符串,我們把這一類字符串稱作一個(gè)模式(Pattern),也稱作是一個(gè)正則。

      一,轉(zhuǎn)義字符

      轉(zhuǎn)義字符是,把普通字符轉(zhuǎn)義為具有特殊含義的元字符,常用的轉(zhuǎn)義字符有:

      • t:水平制表符
      • v:垂直制表符
      • r:回車
      • n:換行
      • \:表示字符 ,也就說,把轉(zhuǎn)義字符 轉(zhuǎn)義為普通的字符
      • ":表示字符 ",在C#中,雙引號用于定義字符串,字符串包含的雙引號用 " 來表示

      二,字符類

      在進(jìn)行正則匹配時(shí),把輸入文本看作是有順序的字符流,字符類元字符匹配的對象是字符,并會捕獲字符。所謂捕獲字符是指,一個(gè)元字符捕獲的字符,不會被其他元字符匹配,后續(xù)的元字符只能從剩下的文本中重新匹配。

      常用的字符類元字符:

      • [ char_group]:匹配字符組中的任意一個(gè)字符
      • [^char_group]:匹配除字符組之外的任意一個(gè)字符
      • [first-last]:匹配從first到last的字符范圍中的任意一個(gè)字符,字符范圍包括first和last。
      • . :通配符,匹配除n之外的任意一個(gè)字符
      • w:匹配任意一個(gè)單詞(word)字符,單詞字符通常是指A-Z、a-z和0-9
      • W:匹配任意一個(gè)非單詞字符,是指除A-Z、a-z和0-9之外的字符
      • s:匹配任意一個(gè)空白字符
      • S:匹配任意一個(gè)非空白字符
      • d:匹配任意一個(gè)數(shù)字字符
      • D:匹配任意一個(gè)非數(shù)字字符

      注意,轉(zhuǎn)義字符也屬于字符類元字符,在進(jìn)行正則匹配時(shí),也會捕獲字符。

      三,定位符

      定位符匹配(或捕獲)的對象是位置,它根據(jù)字符的位置來判斷模式匹配是否成功,定位符不會捕獲字符,是零寬的(寬度為0),常用的定位符有:

      • ^:默認(rèn)情況下,匹配字符串的開始位置;在多行模式下,匹配每行的開始位置;
      • $:默認(rèn)情況下,匹配字符串的結(jié)束位置,或 字符串結(jié)尾的n之前的位置;在多行模式下,匹配每行結(jié)束之前的位置,或者每行結(jié)尾的n之前的位置。
      • A:匹配字符串的開始位置;
      • Z:匹配字符串的結(jié)束位置,或 字符串結(jié)尾的n之前的位置;
      • z:匹配字符串的結(jié)束位置;
      • G:匹配上一個(gè)匹配結(jié)束的位置;
      • b:匹配一個(gè)單詞的開始或結(jié)束的位置;
      • B:匹配一個(gè)單詞的中間位置;

      C#之正則表達(dá)式介紹

      四,量詞、貪婪和懶惰

      量詞是指限定前面的一個(gè)正則出現(xiàn)的次數(shù),量詞分為兩種模式:貪婪模式和懶惰模式,貪婪模式是指匹配盡可能多的字符,而懶惰模式是指匹配盡可能少的字符。默認(rèn)情況下,量詞處于貪婪模式,在量詞的后面加上?來啟用懶惰模式。

      • *:出現(xiàn)0次或多次
      • +:出現(xiàn)1次或多次
      • ?:出現(xiàn)0次或1次
      • {n}:出現(xiàn)n次
      • {n,}:出現(xiàn)至少n次
      • {n,m}:出現(xiàn)n到m次

      注意,出現(xiàn)多次是指前面的元字符出現(xiàn)多次,例如,d{2} 等價(jià)于 dd,只是出現(xiàn)兩個(gè)數(shù)字,并不要求兩個(gè)數(shù)字是相同的。要表示相同的兩個(gè)數(shù)字,必須使用分組來實(shí)現(xiàn)。

      C#之正則表達(dá)式介紹

      五,分組和捕獲字符

      () 括號不僅確定表達(dá)式的范圍,還創(chuàng)建分組,()內(nèi)的表達(dá)式就是一個(gè)分組,引用分組表示兩個(gè)分組匹配的文本是完全相同的。定義一個(gè)分組的基本語法:

      (pattern)

      該類型的分組會捕獲字符,所謂捕獲字符是指:一個(gè)元字符捕獲的字符,不會被其他元字符匹配,后續(xù)的元字符只能從剩下的文本中重新匹配。

      1,分組編號和命名

      默認(rèn)情況下,每個(gè)分組自動(dòng)分配一個(gè)組號,規(guī)則是:從左向右,按分組左括號的出現(xiàn)順序進(jìn)行編號,第一個(gè)分組的組號為1,第二個(gè)為2,以此類推。也可以為分組指定名稱,該分組稱作命名分組,命名分組也會被自動(dòng)編號,編號從1開始,逐個(gè)加1,為分組指定名稱的語法是:

      (?< name > pattern)

      通常來說,分組分為命名分組和編號分組,引用分組的方式有:

      • 通過分組名稱來引用分組:k<name>
      • 通過分組編號來引用分組:number

      注意,分組只能后向引用,也就是說,從正則表達(dá)式文本的左邊開始,分組必須先定義,然后才能在定義之后面引用。

      在正則表達(dá)式里引用分組的語法為“number”,比如“1”代表與分組1 匹配的子串,“2”代表與分組2 匹配的字串,以此類推。

      例如,對于 "<(.*?)>.*?</1>" 可以匹配 <p>valid</p>,在引用分組時(shí),分組對應(yīng)的文本是完全相同的。

      2,分組構(gòu)造器

      分組構(gòu)造方法如下:

      • (pattern):捕獲匹配的子表達(dá)式,并為分組分配一個(gè)組號
      • (?< name > pattern):把匹配的子表達(dá)式捕獲到命名的分組中
      • (?:pattern):非捕獲的分組,并未分組分配一個(gè)組號
      • (?> pattern):貪婪分組

      3,貪婪分組

      貪婪分組也稱作非回溯分組,該分組禁用了回溯,正則表達(dá)式引擎將盡可能多地匹配輸入文本中的字符。如果無法進(jìn)行進(jìn)一步的匹配,則不會回溯嘗試進(jìn)行其他模式匹配。

      (?> pattern )

      4,二選一

      | 的意思是或,匹配兩者中的任意一個(gè),注意,把左右兩邊的表達(dá)式分為兩部分。

      pattern1 | pattern2

      六,零寬斷言

      零寬是指寬度為0,匹配的是位置,所以匹配的子串不會出現(xiàn)在匹配結(jié)果中,而斷言是指判斷的結(jié)果,只有斷言為真,才算匹配成功。

      對于定位符,可以匹配一句話的開始、結(jié)束(^ $)或者匹配一個(gè)單詞的開始、結(jié)束(b),這些元字符只匹配一個(gè)位置,指定這個(gè)位置滿足一定的條件,而不是匹配某些字符,因此,它們被成為 零寬斷言。所謂零寬,指的是它們不與任何字符相匹配,而匹配一個(gè)位置;所謂斷言,指的是一個(gè)判斷,正則表達(dá)式中只有當(dāng)斷言為真時(shí)才會繼續(xù)進(jìn)行匹配。零寬斷言可以精確的匹配一個(gè)位置,而不僅僅是簡單的指定句子或者單詞。

      正則表達(dá)式把文本看作從左向右的字符流,向右叫做后向(Look behind),向左叫做前向(Look ahead)。對于正則表達(dá)式,只有當(dāng)匹配到指定的模式(Pattern)時(shí),斷言為True,叫做肯定式,把不匹配模式為True,叫做否定式。

      按照匹配的方向和匹配的定性,把零寬斷言分為四種類型:

      • (?= pattern):前向、肯定斷言
      • (?! pattern):前向、否定斷言
      • (?<= pattern):后向、肯定斷言
      • (?<! pattern):后向、否定斷言

      1,前向肯定斷言

      前向肯定斷言定義一個(gè)模式必須存在于文本的末尾(或右側(cè)),但是該模式匹配的子串不會出現(xiàn)在匹配的結(jié)果中,前向斷言通常出現(xiàn)在正則表達(dá)式的右側(cè),表示文本的右側(cè)必須滿足特定的模式:

      (?= subexpression )

      使用前向肯定斷言可以定一個(gè)模糊匹配,后綴必須包含特定的字符:

      bw+(?=sisb)

      對正則表達(dá)式進(jìn)行分析:

      • b:表示單詞的邊界
      • w+:表示單詞至少出現(xiàn)一次
      • (?=sisb):前向肯定斷言,s 表示一個(gè)空白字符, is 是普通字符,完全匹配,b 是單詞的邊界。

      從分析中,可以得出,匹配該正則表達(dá)式的文本中必須包含 is 單詞,is是一個(gè)單獨(dú)的單詞,不是某一個(gè)單詞的一個(gè)部分。舉個(gè)例子

      Sunday is a weekend day 匹配該正則,匹配的值是Sunday,而The island has beautiful birds 不匹配該正則。

      2,后向肯定斷言

      后向肯定斷言定義一個(gè)模式必須存在于文本的開始(或左側(cè)),但是該模式匹配的子串不會出現(xiàn)在匹配的結(jié)果中,后向斷言通常出現(xiàn)在正則表達(dá)式的左側(cè),表示文本的左側(cè)必須滿足特定的模式:

      (?<= subexpression )

      使用后向肯定斷言可以定一個(gè)模糊匹配,前綴必須包含特定的字符:

      (?<=b20)d{2}b

      對正則表達(dá)式進(jìn)行分析:

      • (?<=b20):后向斷言,b表示單詞的開始,20是普通字符
      • d{2}:表示兩個(gè)數(shù)字,數(shù)字不要求相同
      • b:單詞的邊界

      該正則表達(dá)式匹配的文本具備的模式是:文本以20開頭、以兩個(gè)數(shù)字結(jié)尾。

      推薦學(xué)習(xí):C#.Net教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號