<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    閑云無(wú)衣
    無(wú)衣的筆記
    http://rubycn.ce-lab.net/20020314.html
    正則表達(dá)式是用來(lái)表達(dá)字符串的模式(pattern)的。也可以這么理解:我們使用正則表達(dá)式來(lái)表示某種搜索規(guī)則,然后使用該正則表達(dá)式來(lái)完成字符 串的搜索工作。舉個(gè)例子,假定有這樣的搜索規(guī)則:“字符串以’FOO’開始,以’R’結(jié)束”,那么就可以使用以下正則表達(dá)式來(lái)表示該規(guī)則。
    /^FOO.*R$/

    Ruby用//將正則表達(dá)式括起來(lái)。^表示開頭,$表示結(jié)尾,.*表示0個(gè)以上的任意字符。

    現(xiàn)在就講講正則表達(dá)式的規(guī)則的寫法。正則表達(dá)式中有很多上述的具有特別意義的字符。首先是下列字符。

    [ ]
    范圍描述符。[a-z]表示從a到z之間的任意一個(gè)。
    \w
    英文字母和數(shù)字。即[0-9 A-Z a-z]。
    \W
    非英文字母和數(shù)字
    \s
    空字符,即[\t\n\r\f]。
    \S
    非空字符。
    \d
    數(shù)字,即[0-9]。
    \D
    非數(shù)字。
    \b
    詞邊界字符(在范圍描述符外部時(shí))
    \B
    非詞邊界字符
    \b
    退格符(0x08)(在范圍描述符內(nèi)部時(shí))
    *
    前面元素出現(xiàn)0次以上
    +
    前面元素出現(xiàn)1次以上
    {m,n}
    前面元素最少出現(xiàn)m次,最多出現(xiàn)n次
    ?
    前面元素出現(xiàn)0次或1次
    |
    選擇
    ( )
    群組
    其他字符
    該字符本身

    例如,“^f[a-z]+”表示“第一個(gè)字符是f,后面是若干個(gè)從a到z之間的字符”,可以是“fobar”或“fool”等等。這種表達(dá)法就是正 則表達(dá)式(regular expression)。在搜索字符串時(shí)正則表達(dá)式非常有用,因此在UNIX的世界里,正則表達(dá)式得到了廣泛的應(yīng)用。grep程序就是個(gè)代表。許多人是不 是經(jīng)常會(huì)用到它呢?

    為了學(xué)會(huì)使用正則表達(dá)式,先來(lái)試試下面這個(gè)程序。請(qǐng)用文件名regx.rb將程序保存下來(lái)以后再運(yùn)行它。

    st = "\033[7m"
    en = "\033[m"

    while TRUE
    print "str> "
    STDOUT.flush
    str = gets
    break if not str
    str.chop!
    print "pat> "
    STDOUT.flush
    re = gets
    break if not re
    re.chop!
    str.gsub! /#{re}/, "#{st}\\&#{en}"
    print str, "\n"
    end
    print "\n"

    該程序會(huì)在第一次輸入的字符串中按照第二次輸入的正則表達(dá)式的要求尋找合適的字符串,并將其以反色顯示出來(lái)。下面是運(yùn)行結(jié)果。

    str> foobar
    pat> ^fo+
    foobar
    ^^^

    # 實(shí)際上foo的部分被反色顯示了。

    再試一試。

    str> abc012dbcd555
    pat> \\d
    abc012dbcd555
    ~~~ ~~~

    從上例可以看出,該程序可以檢測(cè)出多處符合條件的字符串。

    str> foozboozer
    pat> f.*z
    foozboozer
    ~~~~~~~~

    在這個(gè)例子中,正則表達(dá)式“f.*z”并非只是對(duì)應(yīng)到fooz,而是一直對(duì)應(yīng)到foozbooz這里。這是因?yàn)椋齽t表達(dá)式總是在符合條件的結(jié)果中選擇較長(zhǎng)的一個(gè)。

    正則表達(dá)式甚至可以寫出讓人一眼看不透的模式,這可能會(huì)像謎語(yǔ)一樣有趣。但若過(guò)分凝煉的話,以后就很難搞懂當(dāng)初的想法了。

    str> Wed Feb  7 08:58:04 JST 1996
    pat> [0-9]+:[0-9]+(:[0-9]+)?
    Wed Feb 7 08:58:04 JST 1996
    ~~~~~~~~

    Ruby用’/’將正則表達(dá)式括起來(lái)。另外還有一些方法會(huì)自動(dòng)將字符串變?yōu)檎齽t表達(dá)式。

    % ruby -le 'print "abcdef" =~ /d/' 
    3
    % ruby -le 'print "aaaaaa" =~ /d/'
    nil

    ‘=~’是使用正則表達(dá)式進(jìn)行匹配的操作符,它返回匹配成功時(shí)的位置。

    到底哪些方法可以處理正則表達(dá)式呢?關(guān)于這個(gè)問(wèn)題,請(qǐng)查閱參考手冊(cè)。

    posted on 2007-02-06 20:55 無(wú)衣 閱讀(581) 評(píng)論(0)  編輯  收藏 所屬分類: rails
     
    主站蜘蛛池模板: 亚洲精品A在线观看| 大地资源免费更新在线播放| 免费国产a国产片高清| 中文字幕在线观看亚洲日韩| 最近免费中文在线视频| 亚洲无线一二三四区| 亚洲人成免费电影| 亚洲国产电影在线观看| 2020久久精品国产免费| 中文字幕亚洲综合小综合在线| 97免费人妻无码视频| 亚洲一本一道一区二区三区| 成**人免费一级毛片| 色偷偷亚洲男人天堂| 免费少妇a级毛片| 巨胸喷奶水www永久免费| 亚洲av无码精品网站| 日本高清在线免费| 亚洲精品无码久久久久秋霞| 国产在线19禁免费观看| fc2免费人成为视频| 亚洲福利在线观看| 好先生在线观看免费播放| 日韩在线视精品在亚洲| 国产综合亚洲专区在线| 99久久久国产精品免费牛牛四川 | 99热这里只有精品免费播放| 久久久久久亚洲Av无码精品专口 | 污视频在线观看免费| 亚洲乱码一二三四区麻豆| 国产在线a不卡免费视频| 国产在线观看xxxx免费| 亚洲欧洲日本国产| 四虎永久在线精品免费观看地址| 男女拍拍拍免费视频网站| 亚洲字幕在线观看| 久久精品亚洲男人的天堂| 18未年禁止免费观看| 免费一级毛片在线播放放视频| 亚洲国产成人久久综合碰碰动漫3d| 久久这里只有精品国产免费10|