国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄 搜尋
Ruby用戶指南 3、開始 4、簡單的例子 5、字符串 6、正則表達式 7、數組 8、回到那些簡單的例子 9、流程控制 10、迭代器 11、面向對象思維 12、方法 13、類 14、繼承 15、重載方法 16、訪問控制 17、單態(tài)方法 18、模塊 19、過程對象 20、變量 21、全局變量 22、實變量 23、局部變量 24、類常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對象的初始化 29、雜項 RGSS入門教程 1、什么是RGSS 2、開始:最簡單的腳本 3、數據類型:數字 4、數據類型:常量與變量 5、數據類型:字符串 6、控制語句:條件分歧語句 7、控制語句:循環(huán) 8、函數 9、對象與類 10、顯示圖片 11、數組 12、哈希表(關聯數組) 13、類 14、數據庫 15、游戲對象 16、精靈的管理 17、窗口的管理 18、活動指令 19、場景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對象和變量 容器Containers,塊Blocks和迭代Iterators 標準類型 深入方法 表達式Expressions 異常,捕捉和拋出(已經開始,by jellen) 模塊 基本輸入輸出 線程和進程 當遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內建類和方法 標準庫 OO設計 網絡和Web庫 Windows支持 內嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結束時的相關處理 線程 安全模型 正則表達式 字句構造 程序 變量和常數 字面值 操作符表達式 控制結構 方法調用 類/方法的定義 內部函數 內部變量 內部常數 內部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術語集 Ruby的運行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
文字

我們再看一個更有趣的程序.這次我們來測試一個字符串是否和一個由簡明模式(concise?pattern)編碼產生的描述相匹配.

在這些模式(pattern)里,一些字符或字符組合都有獨特的意義,包括:?

[]??范圍描述符?(比如,[a?-?z]?表示在a?到?z?范圍內的一個字母)??

\w??字母或數字;相當于?[0-9A-Za-z]?

\W??非字母,數字?

\s??[?\t\n\r\f]空字符;相當于?[?\t\n\r\f]?

\S??非空字符?

\d??[0-9]數字;相當于?[0-9]?

\D??非數字字符?

\b??退格符?(0x08)?(僅在范圍描述符內部時)?

\b??字邊界(word?boundary)?(在范圍描述符外部時)?

\B??非字邊界?

*??前面元素出現0或多次?

+??前面元素出現1或多次?

{m,n}??前面元素最少出現m次,最多出現n次?

???前面元素最多出現1次;相當于?{0,1}?

|??與前面或后面的表達式匹配?

()??群(?grouping)?

那些模式中共同使用的古怪詞匯叫做正則表達式.就象Perl一樣,Ruby也用前斜杠(而不是雙引號)將它們括起來.如果你以前從未使用過正則表達式,也許它們看起來除了規(guī)則(regular)什么都不是,但花上一點兒時間了解它們是明智的.當你需要對字符串進行模式匹配,查找或其它操作時,它的高效的表達能力能治好你的頭痛(并節(jié)約很多行代碼).

舉個例子,設想我們想要測試一個字符串是否符合這樣的描述信息"由小寫f開頭,跟一個大寫字母,并可能跟許多非小寫字母在后面."如果你是一個老練的C程序員,大概你的頭腦里已經裝滿幾十行程序了,對不對?承認吧,你難以控制住自己.在Ruby里,你只需要將你的字符串用正則表達式/^f[A-Z](^[a-z])*$/檢驗一下就可以了.

那"一個由<>括起來的16位數呢"?沒問題.

ruby>?def?chab(s)???#?"contains?hex?in?angle?brackets"
????|????(s?=~?/<0(x|X)(\d|[a-f]|[A-F])+>/)?!=?nil
????|?end
??nil
ruby>?chab?"Not?this?one."
??false
ruby>?chab?"Maybe?this??{0x35}"????#?wrong?kind?of?brackets
??false
ruby>?chab?"Or?this??<0x38z7e>"????#?bogus?hex?digit
??false
ruby>?chab?"Okay,?this:?<0xfc0004>."
??true?

雖然,初看起來正則表達式挺讓人頭痛的,但你很快會因能夠如此高效地表達出你心中的意思而感到滿足.

下面是一個可以幫助你實驗正則表達式的小程序,把它存為regx.rb,然后在命令行里輸入'ruby?regx.rb'運行.

#?Requires?an?ANSI?terminal!
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"?

這個小程序要求輸入兩次,一次字符串,一次正則表達式.輸入的字符串由正則表達式檢驗,然后用反視高亮度顯示所有匹配部分.先別管細節(jié),等會兒就有代碼分析.

str>?foobar
pat>?^fo+
foobar
~~~?

上面紅色部分將在程序輸入中以反視表示出.下面的"~~~"行是為了方便那些使用基于字符瀏覽器的人.

我們再試幾個輸入:

str>?abc012dbcd555
pat>?\d
abc012dbcd555

如果讓你感到驚訝,看看本頁開頭部分的那個表格:?\d與字母d無關,而是對應于單個數字.

如果有不止一種方法能匹配模式會怎樣呢?

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

之所以foozbooz被匹配而不只是fooz,是因為一個正則表達符盡可能匹配最長的子串.

下面是一個將冒號分隔的數字時間段從字符串中隔離出來的模式匹配.

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

"=~"是一個用于匹配正則表達式的匹配(matching)運算符;它會返回在字符串里找到的匹配的位置,或者返回?nil?表示模式無法匹配.

ruby>?"abcdef"?=~?/d/
???3
ruby>?"aaaaaa"?=~?/d/
???nil? 版權聲明:RUBY文檔中心的所有文章標明[原創(chuàng)]的均為本站作品,版權屬RUBY中文化計劃,若轉載請注明;標明[翻譯]的其外文版權歸原作者,譯文版權屬RUBY中文化計劃;標明[轉貼]的,若原作者感到侵犯了他的著作權,那么請及時跟主持人聯系,我們會盡快更正。 ?
上一篇: 下一篇: