• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Lex和Yacc從入門到精通(2)-正則表達式篇

            原文地址

            正則表達式在Unix/Liunx系統中起著非常重要的作用,在很大一部分的程序中都使用了正則表達式,可以這么說:“在Unix/Linux系統中,如果不懂正則表達式就不算會使用該系統”。本文中使用的Lex和Yacc都是基于正則表達式的應用,因此有必要用一篇文檔的形式詳細說明在Lex和Yacc中使用的正則表達式為何物!

            其實正則表達式非常簡單,用過DOS的人都知道通配符吧,說得簡單一點,正則表達式就是稍微復雜一點的通配符。這里的正則表達式非常簡單,規則非常少,只需要花上幾分鐘就可以記住。正則表達式的元字符列表如下:

            元字符

             

             

            匹配內容

             

             

            .

            除了換行符之外的任意字符

            \n

            換行符

            *

            0次或者多次匹配

            +

            1次或者多次匹配

            ?

            0次或者1次匹配

            ^

            行首

            $

            行尾

            a|b

            a或者b

            (ab)+

            ab的一次或者多次匹配

            “a+b”

            a+b(字面意思)

            []

            一類字符

            有了上面的元字符之后,就可以用上面的元字符表達出非常復雜的匹配內容出來,就像DOS名令中的通配符可以匹配多個指定規則的文件名一樣。現在讓我們看看上面的元字符的一些應用例子,列表如下:

            表達式

             

             

            匹配內容

             

             

            abc

            abc

            abc*

            abc abcc abccc abcccc ……

            abc+

            abcc abccc abcccc ……

            a(bc)+

            abcbc abcbcbc abcbcbcbc ……

            a(bc)?

            abc abcbc

            [abc]

            a b c其中之一

            [a-z]

            a b c d e f g… … z其中之一

            [a\-z]

            a – z 三個字符其中之一

            [-az]

            – a z 三個字符其中之一

            [A-Za-z0-9]+

            大小寫字符和10個數字的一個或多個

            [ \t\n]

            空格,跳格,換行三者之一(空白符)

            [^ab]

            除了ab之外的任意字符

            [a^b]

            a ^ b 三者之一

            [a|b]

            a | b 三者之一

            a|b

            a b 兩者之一

            ^abc$

            只有abc的一行

             

            注意*和+的區別,通配符只是匹配之前最近的元素,可以用小括號將多個元素括起來,整個括號括起來的整體可以看作是一個元素。那么通配符就可以匹配整個括號的內容了。

            方括號表示的是一類字符,[abc]就是定義了只有abc三個字符的一類字符。這一點和abc不同,如果跟上通配符(*+?)的話,那么方括號就可以表示前面的任意的字符之一的一個字符的多個匹配,但是abc的話就只能是c的多個匹配了。說的更明白點就是DOS里面的通配符*表示的是任意字符的零個或者多個,而這里的方括號就是把DOS里面的任意字符類縮小為只有方括號表示的類了。另外還要注意連字符-在方括號中的意思,在方括號的中間表示“范圍”的意思,而在首部則僅僅表示自己而已。

            轉義用\,這和C語言類似,另外還需要注意三個特殊的元字符(^ | $)的意義。‘^’放在方括號的首部表示“除了”的意思,在其他地方沒有特別意義。‘|’不在方括號中表示“或者”,‘$’通常表示行尾。

            通過上面的注釋可以看出:使用正則表達式可以表示非常復雜的匹配內容。

            posted on 2008-02-01 11:07 FongLuo 閱讀(423) 評論(0)  編輯 收藏 引用 所屬分類: 編譯原理

            <2008年9月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導航

            常用鏈接

            留言簿

            隨筆分類(11)

            隨筆檔案(79)

            文章檔案(1)

            收藏夾(38)

            學習網站

            一般網站

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            亚洲AV无码久久| 久久久久亚洲AV综合波多野结衣| 久久久无码精品亚洲日韩京东传媒 | 97久久国产综合精品女不卡| 亚洲va久久久噜噜噜久久狠狠 | 国内精品九九久久精品| 精品熟女少妇a∨免费久久| 国产精品欧美久久久久无广告| 久久人人爽人人爽人人片av麻烦| 精品蜜臀久久久久99网站| 性做久久久久久久久久久| 久久狠狠高潮亚洲精品| 亚洲精品tv久久久久| 66精品综合久久久久久久| 日韩精品久久久久久久电影蜜臀 | 国产一级持黄大片99久久| 一级a性色生活片久久无| 91久久香蕉国产熟女线看| 性欧美丰满熟妇XXXX性久久久| 国内精品久久久久久久久电影网| 久久精品一区二区三区AV| 午夜精品久久久久9999高清| 9999国产精品欧美久久久久久| 久久天天躁狠狠躁夜夜躁2O2O| 日本亚洲色大成网站WWW久久| 99久久免费国产精品| 久久精品国产亚洲AV嫖农村妇女| 久久久久国产精品人妻| 亚洲精品午夜国产va久久| 亚洲午夜无码AV毛片久久| 久久av免费天堂小草播放| 久久精品国产99久久丝袜| 久久精品国产亚洲7777| 久久噜噜久久久精品66| 久久久久无码国产精品不卡| 久久婷婷五月综合成人D啪| 久久亚洲国产精品五月天婷| 亚洲国产小视频精品久久久三级| 久久久WWW免费人成精品| 亚洲精品美女久久久久99小说| 久久久久亚洲AV成人网人人网站|