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

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

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

    搬磚頭

    Knocking on Heaven's Door
    posts - 34, comments - 6, trackbacks - 0, articles - 0

    Ruby正則表達式

    Posted on 2007-09-18 16:10 生活在別處 閱讀(1123) 評論(0)  編輯  收藏 所屬分類: Ruby

     

    Ruby中常會用到正則表達式。正則表達式是用來表達字符串的模式(pattern)的。也可以這么理解:我們使用正則表達式來表示某種搜索規則,然后使用該正則表達式來完成字符串的搜索工作。舉個例子,假定有這樣的搜索規則:“字符串以’FOO’開始,以’R’結束”,那么就可以使用以下正則表達式來表示該規則。

    /^FOO.*R$/

    Ruby用//將正則表達式括起來。^表示開頭,$表示結尾,.*表示0個以上的任意字符。

    現在就講講正則表達式的規則的寫法。正則表達式中有很多上述的具有特別意義的字符。首先是下列字符。
    [ ]
    范圍描述符。[a-z]表示從a到z之間的任意一個。
    \w
    英文字母和數字。即[0-9 A-Z a-z]。
    \W
    非英文字母和數字
    \s
    空字符,即[\t\n\r\f]。
    \S
    非空字符。
    \d
    數字,即[0-9]。
    \D
    非數字。
    \b
    詞邊界字符(在范圍描述符外部時)
    \B
    非詞邊界字符
    \b
    退格符(0x08)(在范圍描述符內部時)
    *
    前面元素出現0次以上
    +
    前面元素出現1次以上
    {m,n}
    前面元素最少出現m次,最多出現n次
    ?
    前面元素出現0次或1次
    |
    選擇
    ( )
    群組
    其他字符
    該字符本身

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

    為了學會使用正則表達式,先來試試下面這個程序。請用文件名regx.rb將程序保存下來以后再運行它。

    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"

    該程序會在第一次輸入的字符串中按照第二次輸入的正則表達式的要求尋找合適的字符串,并將其以反色顯示出來。下面是運行結果。

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

    # 實際上foo的部分被反色顯示了。

    再試一試。

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

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

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

    在這個例子中,正則表達式“f.*z”并非只是對應到fooz,而是一直對應到foozbooz這里。這是因為,正則表達式總是在符合條件的結果中選擇較長的一個。

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

    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用’/’將正則表達式括起來。另外還有一些方法會自動將字符串變為正則表達式。

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

    ‘=~’是使用正則表達式進行匹配的操作符,它返回匹配成功時的位置。

    到底哪些方法可以處理正則表達式呢?關于這個問題,請查閱參考手冊。 


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品免费视在线观看| 一区二区视频在线免费观看| 久久久久久久久久国产精品免费| 国产A∨免费精品视频| 又大又黄又粗又爽的免费视频| 337p日本欧洲亚洲大胆裸体艺术| 亚洲综合在线视频| 亚洲乱码国产乱码精华| 国产男女性潮高清免费网站| 亚洲人av高清无码| 国产99视频免费精品是看6| 老司机免费午夜精品视频| 亚洲区不卡顿区在线观看| 国产午夜成人免费看片无遮挡 | 色婷婷六月亚洲婷婷丁香| 亚洲色大网站WWW永久网站| 好吊妞视频免费视频| 久久精品a亚洲国产v高清不卡| 性生大片视频免费观看一级| 久久亚洲精品无码播放| 亚洲av无码成人影院一区| 波多野结衣免费视频观看| 免费h视频在线观看| 亚洲精品无码永久在线观看| 两个人日本免费完整版在线观看1| 国产男女猛烈无遮挡免费网站| 天天爽亚洲中文字幕| 国产成人一区二区三区免费视频 | 亚洲免费视频网址| 91在线亚洲综合在线| 亚洲国产小视频精品久久久三级| 亚洲av成人中文无码专区| 久久精品亚洲男人的天堂 | 久久久久se色偷偷亚洲精品av | 国产一级a毛一级a看免费人娇| 四虎免费影院4hu永久免费| 人妻在线日韩免费视频| 亚洲精品人成网在线播放影院| 麻花传媒剧在线mv免费观看| 中文字幕亚洲精品| 日韩在线看片免费人成视频播放|